挂钩函数构造函数 (JavaScript)

Hooking Function Constructor (JavaScript)

有谁知道检测新函数何时创建的方法吗?

我知道您可以挂钩函数 class 构造函数,但这只会检测 new Function() 调用,而不是 function func(){} 声明。

我假设 JS 引擎在看到函数声明时只是创建了一个默认函数 class 而不是查看全局函数 class.

有谁知道是否是这种情况,或者您是否可以拦截函数声明。

要挂钩的示例函数:

function add(x,y){return x+y}

钩子应该在定义时获取函数,并希望重新定义它以便能够捕获参数、this 和 return 值。

(此处为 V8 开发人员。)

不,没有办法拦截所有的函数声明。

FWIW,这不是由个别引擎决定的; JavaScript 语言没有提供实现此目的的方法,引擎的目标是在没有任何自定义偏差的情况下实现该语言(即既不添加也不删除功能)。

我可以提供两种可能适合或不适合您目的的替代想法:
(1) V8 有一个 --trace 标志,它将所有函数条目和 return 记录到标准输出。请注意:这往往会产生 lot 的输出。
(2) 您可以将您感兴趣的应用程序的源代码提供给 JavaScript 解析器,然后 运行 对它生成的 AST 进行任何分析(and/or 转换)。这不会捕获动态生成和 eval 编辑的函数,但它会找到所有 function func() {...} 声明。


The need is game hacking.

为了帮助您提出更好的问题(这样您可能会得到更有帮助的答案),我想指出这不是@Bergi 要求的详细程度:一般区域你是活跃的不提供任何可能的替代方法的提示。想要挂钩函数声明以便您可以捕获它们的参数和 return 值是搜索特定解决方案。 @Bergi 的问题是:你想通过拦截所有功能来解决的具体问题是什么?

就是说,“游戏黑客”虽然非常模糊,但听起来确实很阴暗,我想谦虚地建议您不仅要考虑自己是否 可以,但也要充分考虑你是否应该.