我正在玩frida
,特别是iOS上的frida-trace
。
当一个方法挂钩并且我可以在onEnter
中记录参数时,有没有办法让这个函数尽早调用,而不是调用原始方法?
我尝试将return;
添加到onEnter
方法,但仍会调用onLeave
并调用其中的方法。
答案 0 :(得分:2)
我有同样的问题,所以问Github,这是oleavr的回答:
不,这将要求Interceptor知道函数的调用约定和签名,例如对于stdcall。改为使用Interceptor.replace()。
要了解有关Interceptor.replace()的更多信息,您可以查找official documentation,但正如名称所示,您可以使用自己的实现替换原始函数:
var openPtr = Module.findExportByName("libc.so", "open");
var open = new NativeFunction(openPtr, 'int', ['pointer', 'int']);
Interceptor.replace(openPtr, new NativeCallback(function (pathPtr, flags) {
var path = Memory.readUtf8String(pathPtr);
log("Opening '" + path + "'");
var fd = open(pathPtr, flags);
log("Got fd: " + fd);
return fd;
}, 'int', ['pointer', 'int']));
(来自文档的例子。)