c++ 从.rdata节中删除IMAGE_DEBUG_DIRECTORY

zpqajqem  于 2023-10-20  发布在  其他
关注(0)|答案(2)|浏览(161)

如何从PE的.rdata部分删除IMAGE_DEBUG_DIRECTORY数据?
我使用的是MS Visual Studio 2015。我检查了项目属性的几乎所有编译选项。但是IMAGE_DEBUG_DIRECTORY数据仍然存在于我的输出可执行文件中.

0dxa2lsx

0dxa2lsx1#

您可以通过设置未记录的链接器选项**/EMITPOGOPHASEINFO来完成此操作。所以转到链接器命令行并在附加选项中插入此字符串(/EMITPOGOPHASEINFO**)。此选项抑制pe中的pgo(Profile-Guided Optimizations)部分
阅读:Pogo aka PGO aka Profile Guided OptimizationWalkthrough: Using Profile-Guided Optimizations
当然,你不能生成的/DEBUG信息-使用/DEBUG链接器选项-所以一定要在链接器命令行中没有/DEBUG选项。或者使用/DEBUG:NONE /EMITPOGOPHASEINFO组合-在这种情况下,pe文件中不能是IMAGE_DEBUG_DIRECTORY

rbpvctlc

rbpvctlc2#

自Visual Studio 2022版本17.3起,此解决方法不再有效,因为它会产生损坏的可执行文件(IMAGE_RESOURCE_DIRECTORY条目无效,Windows资源管理器和资源操作工具都无法找到.rsrc部分,即使它仍然存在于文件中)。
解决方法是使用Explorer Suite中的CFF Exlporer。尽管声称它的版本III,它实际上是版本VIII,只有独立的CFF浏览器是旧的比一个捆绑在套件。
一旦你安装了这个套件,删除IMAGE_DEBUG_DIRECTORY就很容易了。

  • 右键单击可执行文件,从上下文菜单中选择使用CFF Explorer打开

  • 单击左窗格中的数据目录
  • 右键单击“目录RVA”,然后选择“删除目录RVA
  • 单击文件,然后单击保存为.并以新名称进行保存
    **重要提示:**请确保在替换原始文件之前彻底测试新的可执行文件。

相关问题