如果我想在Javascript中挂起对eval和settimeout等函数的调用来获取代码eval将要执行的内容,并且通过函数settimeout将调用,我将从哪里开始?
场景是,我转到chrome的网页,我想在每个点设置一个断点。然而,它们可能会被混淆(可能是恶意的),因此我不能仅仅搜索这些类型的呼叫来源。
我不能直接使用chrome来执行此操作,还是我真的需要在v8中创建一个钩子来捕获对特定js函数的这些调用?
答案 0 :(得分:0)
无法拦截所有代码执行事件。你必须修改来源。
也就是说,eval
和setTimeout
都只是函数,作为全局对象的可配置属性安装。你可以用包装器覆盖它们:
var original_eval = eval;
eval = function(str) {
console.log("eval was called with: " + str);
return original_eval(str);
}
请注意,eval
和setTimeout
之间存在很大的概念差异:前者采用新的源代码,后者只能安排对现有函数的调用(可能是使用{{1创建的) }})。
还有eval
构造函数,类似于Function
。