【发布时间】:2017-08-07 02:37:37
【问题描述】:
如何从 PE 的 .rdata 部分删除 IMAGE_DEBUG_DIRECTORY 数据?
我使用的是 MS Visual Studio 2015。我确实检查了项目属性的几乎所有编译选项。但是 IMAGE_DEBUG_DIRECTORY 数据仍然存在于我的输出可执行文件中...
【问题讨论】:
标签: c++ visual-c++ portable-executable
如何从 PE 的 .rdata 部分删除 IMAGE_DEBUG_DIRECTORY 数据?
我使用的是 MS Visual Studio 2015。我确实检查了项目属性的几乎所有编译选项。但是 IMAGE_DEBUG_DIRECTORY 数据仍然存在于我的输出可执行文件中...
【问题讨论】:
标签: c++ visual-c++ portable-executable
您可以通过设置未记录的链接器选项/EMITPOGOPHASEINFO来做到这一点。所以转到链接器命令行并在附加选项中插入此字符串 (/EMITPOGOPHASEINFO)。此选项抑制 pe 中的 pgo (Profile-Guided Optimizations) 部分
另请阅读:Pogo aka PGO aka Profile Guided Optimization 和 Walkthrough: Using Profile-Guided Optimizations
当然你不能生成调试信息-使用/DEBUG链接器选项-确保链接器命令行中没有/DEBUG选项。或者使用 /DEBUG:NONE /EMITPOGOPHASEINFO 组合 - 在这种情况下,pe 文件中不能是 IMAGE_DEBUG_DIRECTORY
【讨论】:
/EMITPOGOPHASEINFO 编译选项,我可以从.rdata 部分中删除IMAGE_DEBUG_TYPE_ 数据。但是IMAGE_DEBUG_DIRECTORY 数据仍然存在...
/DEBUG 链接器选项吗?我假设您将其删除-众所周知。您必须删除它 - 在命令行中不能是 /DEBUG。或/DEBUG:NONE /EMITPOGOPHASEINFO
/DEBUG 选项,IMAGE_DEBUG_DIRECTORY 数据仍然存在...
/DEBUG 并使用/EMITPOGOPHASEINFO,则不得为IMAGE_DEBUG_DIRECTORY
/OPT:NOREF 和 /LTCG 典型用于发布版本。 whrn 与调试构建相关的初始选项