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

Frida单脚本多拦截器实现问题:如何拦截两个指定地址

解决Frida单脚本多地址拦截的问题

错误原因

你碰到的TypeError: not all arguments converted during string formatting,是因为修改后的Frida脚本字符串里已经没有%s占位符,但代码末尾还保留了% int(sys.argv[1], 16)的字符串格式化操作——Python找不到对应的占位符来填充参数,所以抛出这个错误。

Frida单脚本支持多拦截器吗?

完全支持。你可以在同一个Frida脚本里多次调用Interceptor.attach(),同时拦截多个不同的地址,不需要拆分脚本,这样也方便你关联两个地址的相关数据。

正确写法

1. 固定地址的写法(不需要命令行传参)

直接移除末尾多余的格式化操作即可:

script = session.create_script("""
var g_db_path = "";
// 拦截第一个地址
Interceptor.attach(ptr("0x7FFCF5D50000"), { 
    onEnter(args){
        // 这里编写第一个地址的拦截逻辑
        // 比如打印参数、修改值等
    }
});
// 拦截第二个地址
Interceptor.attach(ptr("0x7FFCF7C99B00"), {
    onEnter(args){
        // 这里编写第二个地址的拦截逻辑
    }
});
""")

2. 支持命令行传多个地址的写法(可选)

如果之后需要灵活传参,可在脚本里添加多个%s占位符,对应传入多个命令行参数:

import sys
# 从命令行读取两个十六进制地址
addr1 = int(sys.argv[1], 16)
addr2 = int(sys.argv[2], 16)

script = session.create_script("""
var g_db_path = "";
Interceptor.attach(ptr("%s"), { 
    onEnter(args){
        console.log("触发第一个地址拦截");
    }
});
Interceptor.attach(ptr("%s"), {
    onEnter(args){
        console.log("触发第二个地址拦截");
    }
});
""" % (addr1, addr2))

运行时只需传入两个地址参数:python your_script.py 0x7FFCF5D50000 0x7FFCF7C99B00

内容的提问来源于stack exchange,提问作者wyllle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 00:42:14