【发布时间】:2016-10-02 10:52:36
【问题描述】:
我在玩 frida,特别是 iOS 上的 frida-trace。
当一个方法被挂钩并且我可以在onEnter 中记录参数时,有没有办法让这个函数调用提前结束而不调用原始方法?
我已经尝试将return; 添加到onEnter 方法中,但是onLeave 仍然被调用并且中间的方法被调用。
【问题讨论】:
我在玩 frida,特别是 iOS 上的 frida-trace。
当一个方法被挂钩并且我可以在onEnter 中记录参数时,有没有办法让这个函数调用提前结束而不调用原始方法?
我已经尝试将return; 添加到onEnter 方法中,但是onLeave 仍然被调用并且中间的方法被调用。
【问题讨论】:
我也有同样的问题,所以在Github 上问过,这是 oleavr 的回答:
不,这需要 Interceptor 知道函数的调用约定和签名,例如对于标准调用。请改用 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']));
(来自文档的示例。)
【讨论】: