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

能否在不修改源码的情况下清除MSVC C++二进制文件中的所有修饰名?

无需修改源代码,移除或随机化MSVC编译二进制里的修饰名字符串

几种可行的解决办法

1. 调整MSVC链接器参数

  • 编译时给链接器添加 /RELEASE、/OPT:REF 和 /OPT:ICF 选项,能自动移除未被引用的函数、类的修饰名,但已被程序调用的修饰名仍会保留在二进制文件中。
  • 若想彻底清除所有修饰名,可尝试使用 /NODEFAULTLIB 选项,但该选项会禁用默认库,可能引发程序运行错误,需先确认程序能适配此设置。

2. 后期编辑二进制文件

  • MSVC自带的 editbin.exe 无法直接删除修饰名,但可搭配第三方PE文件编辑工具,扫描定位修饰名字符串后,将其替换为随机字节或空内容。注意:直接修改PE结构易破坏文件完整性,操作前务必备份原文件。
  • 也可先用 strings myexe.exe 定位修饰名的位置,再用十六进制编辑器手动替换,但这种方法效率低且容易出错。

3. 借助代码混淆工具

  • 像VMProtect、Themida这类专业混淆工具,能自动扫描二进制中的所有字符串(包括修饰名),要么替换为无意义的乱码,要么进行加密处理,全程无需修改源代码。处理完成后,再用strings命令查询,将无法识别到原修饰名。

注意事项

  • 若程序依赖这些修饰名(比如动态导出类或函数),随意删除或修改会导致程序崩溃,需先确认程序运行不依赖这些字符串。
  • 所有修改二进制文件的操作,必须先备份原文件,避免出现不可逆的损坏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 05:03:09