【问题标题】:Remove IMAGE_DEBUG_DIRECTORY from .rdata section从 .rdata 部分中删除 IMAGE_DEBUG_DIRECTORY
【发布时间】:2017-08-07 02:37:37
【问题描述】:

如何从 PE 的 .rdata 部分删除 IMAGE_DEBUG_DIRECTORY 数据?

我使用的是 MS Visual Studio 2015。我确实检查了项目属性的几乎所有编译选项。但是 IMAGE_DEBUG_DIRECTORY 数据仍然存在于我的输出可执行文件中...

【问题讨论】:

    标签: c++ visual-c++ portable-executable


    【解决方案1】:

    您可以通过设置未记录的链接器选项/EMITPOGOPHASEINFO来做到这一点。所以转到链接器命令行并在附加选项中插入此字符串 (/EMITPOGOPHASEINFO)。此选项抑制 pe 中的 pgo (Profile-Guided Optimizations) 部分

    另请阅读:Pogo aka PGO aka Profile Guided OptimizationWalkthrough: Using Profile-Guided Optimizations

    当然你不能生成调试信息-使用/DEBUG链接器选项-确保链接器命令行中没有/DEBUG选项。或者使用 /DEBUG:NONE /EMITPOGOPHASEINFO 组合 - 在这种情况下,pe 文件中不能是 IMAGE_DEBUG_DIRECTORY

    【讨论】:

    • 天哪!谢谢。我从你身上学到了很多。使用/EMITPOGOPHASEINFO 编译选项,我可以从.rdata 部分中删除IMAGE_DEBUG_TYPE_ 数据。但是IMAGE_DEBUG_DIRECTORY 数据仍然存在...
    • @ChangUk - 你使用/DEBUG 链接器选项吗?我假设您将其删除-众所周知。您必须删除它 - 在命令行中不能是 /DEBUG。或/DEBUG:NONE /EMITPOGOPHASEINFO
    • 我在“链接器 > 调试 > 生成调试信息”属性中设置了“否”...尽管没有 /DEBUG 选项,IMAGE_DEBUG_DIRECTORY 数据仍然存在...
    • @ChangUk - 复制粘贴您的确切链接器命令行。如果您不使用/DEBUG 并使用/EMITPOGOPHASEINFO,则不得为IMAGE_DEBUG_DIRECTORY
    • @ChangUk - 是的,/OPT:NOREF/LTCG 典型用于发布版本。 whrn 与调试构建相关的初始选项
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-15
    • 2017-08-08
    • 2015-05-13
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多