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
相关产品推荐
相关产品推荐

