0

我正在尝试在两个 Google V8 支持的环境(Thug 和 JS 强制执行引擎)中检测 JavaScript 函数调用。基本上,当我使用 JavaScript 运行外部提供的 HTML 文件时,我希望每个 API 调用都包含一行: - 调用名称 - 发送到调用的参数(如果有的话)

我目前可以通过执行以下操作为 JavaScript 全局方法(例如 - eval()、decode()、encode())和各种 DOM 级方法(例如 - document.createElement())执行此操作:

var old_eval = eval;
function new_eval(foo0)
{
    alert("INSTRUMENTATION: eval," + foo0);
    return old_eval(foo0);
}
eval = new_eval;

我能够在我自己的 JavaScript 文件中定义这样的方法,然后将此文件合并到 V8 运行时中。

这对于全局函数来说足够好,但对对象成员访问或对对象级方法的访问没有帮助(例如 - somestring.indexOf())。

任何帮助将不胜感激!

4

1 回答 1

1

不直接支持记录 V8 中的所有函数事件。你有两个选择:

  1. 预先修补所有已知函数/getter/setter(需要完全了解您的代码库)
  2. 补丁 V8 以记录所有函数调用

选项 2 肯定会更有效。部分支持记录函数的第一次执行,--log-function-events但不包括 API 回调(例如 DOM 访问器和某些内置函数)。

正确支持记录所有函数调用在 V8 中是一项不平凡的任务,并且需要修补代码库中的各个位置。

于 2018-07-31T16:14:02.147 回答