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

无法重编译时直接修改C++二进制使Agent::check恒返回true是否可行

可行性结论

该操作完全可行,不需要重编译整个项目即可实现需求。C++编译后的函数对应二进制文件中一段连续的机器码,只要定位到Agent::check的函数位置,直接修改返回逻辑就能让该方法永远返回true。

操作步骤
  • 定位函数入口:用反汇编工具加载目标二进制,优先通过符号表查找Agent::check的函数偏移地址。如果是剥离了符号表的Release版本,可以借助你手上的源码做特征定位:该函数内部会调用checkCondition,通过交叉引用找调用checkCondition且返回值为bool的函数,很快就能锁定目标位置。
  • 修改入口机器码:bool类型返回值在绝大多数平台调用约定下,都是通过特定寄存器存储的,你不需要管函数内部原有判断逻辑,直接在函数最开头写入固定返回true的指令、直接返回即可,不会破坏原有栈平衡——尤其你的Agent::check是静态成员函数,没有隐式this指针参数,这种改法稳定性极高。不同架构对应写入的机器码如下:
    • x86 32位 / x86_64 64位平台:写入字节序列B0 01 C3,对应汇编逻辑为mov al, 0x1; ret,即把返回值寄存器设为1(对应true)后直接返回
    • ARM64平台:写入字节序列20 00 80 52 C0 03 5F D6,对应汇编逻辑为mov w0, #1; ret
  • 保存修改后的二进制,备份原文件后测试运行即可。
注意事项
  • 修改前务必备份原始二进制文件,改错偏移位置会直接导致程序运行崩溃。
  • 如果目标二进制加了代码签名、内存校验、反篡改保护,修改后需要绕过对应校验逻辑,否则程序会出现闪退、校验失败报错等问题。
  • 你持有全部源码,哪怕没法完成全量编译,也可以单独写个最小demo复现这个函数的逻辑编译,对比生成的机器码特征,能大幅提升函数定位效率,比盲翻反汇编代码快很多。
  • 不要尝试修改函数内部的分支判断逻辑,直接在函数入口覆盖返回指令是容错率最高的改法,不会触发后续逻辑的栈异常、寄存器污染问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 10:30:55