我正在玩frida
,特别frida-trace
是在 iOS 上。
当一个方法被钩住并且我可以记录参数时onEnter
,有没有办法让这个函数调用提前结束而不调用原始方法?
我已经尝试添加return;
到该onEnter
方法,但是onLeave
仍然被调用并且中间的方法被调用。
我有同样的问题,所以在Github上问过,这是 oleavr 的回答:
不,这需要 Interceptor 知道函数的调用约定和签名,例如 stdcall。改用 Interceptor.replace() 。
要了解有关 Interceptor.replace() 的更多信息,您可以查看官方文档,但正如其名称所示,您可以将原始函数替换为您自己的实现:
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']));
(来自文档的示例。)