You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 11:15:05