3

我正在玩frida,特别frida-trace是在 iOS 上。

当一个方法被钩住并且我可以记录参数时onEnter,有没有办法让这个函数调用提前结束而不调用原始方法?

我已经尝试添加return;到该onEnter方法,但是onLeave仍然被调用并且中间的方法被调用。

4

1 回答 1

2

我有同样的问题,所以在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']));

(来自文档的示例。)

于 2018-04-25T15:37:03.987 回答