在Google V8中检测JavaScript调用

时间:2018-07-25 17:24:35

标签: javascript v8 instrumentation

我正在尝试在两个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())。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

记录所有功能不直接支持V8中的事件。 您有两种选择:

  1. 预先修补所有已知的函数/获取器/设置器(需要全面了解您的代码库)
  2. 修补V8以记录所有函数调用

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

正确支持记录所有函数调用在V8中是一项艰巨的任务,并且需要在代码库中打补丁。