Frida hook脚本调用Interceptor.attach报expected a callback value错误原因
错误产生原因
find_func_address自身没有外层返回值。你将return new NativePointer(f.address)写在了Module.enumerateExports的onMatch回调内部,这个return只能结束onMatch回调的执行,无法把地址值传递到find_func_address的调用方,最终find_func_address执行结束后返回的是undefined。而Interceptor.attach要求第一个入参必须是目标函数的合法NativePointer指针,传入undefined就会触发你遇到的报错。Module.enumerateExports的onMatch回调规则是只有返回字符串stop时才会提前终止遍历,你直接返回NativePointer的写法既不会中断遍历,也无法实现值向外层传递的效果。
修复后的参考代码
function find_func_address(lib, func) { // 在外层定义变量存储找到的地址 let targetAddress = null; Module.enumerateExports(lib, { onMatch: function(f) { if(f.name === func) { console.log("找到目标函数,地址为:" + f.address); targetAddress = f.address; // 找到后返回stop终止遍历,避免不必要的性能消耗 return 'stop'; } }, onComplete: function() {} }); // 外层函数返回找到的地址 return targetAddress; } const targetFuncAddr = find_func_address("lib.so", "myFunc"); // 先判断地址是否找到,再执行Hook逻辑避免报错 if(targetFuncAddr) { Interceptor.attach(targetFuncAddr, { onEnter: function (args) { console.log("enter"); }, onLeave: function(retval) { console.log("exit"); } }); } else { console.log("未找到指定导出函数,请检查so库名和函数名是否正确"); }
内容的提问来源于stack exchange,提问作者vtable
相关产品推荐
相关产品推荐

