【问题标题】:How can I strip compiler information from PE?如何从 PE 中剥离编译器信息?
【发布时间】:2018-01-31 18:00:26
【问题描述】:

有没有一种简单的方法可以从 PE 文件中去除编译器信息?

【问题讨论】:

  • 我怀疑该字符串确实存在于 PE 二进制文件中。 (例如,“v2.x”位永远不会被 v3.x 编译器放入二进制文件中)。最有可能的是,exeinfo 检查一堆标记,然后将它们组合到那个字符串中。
  • @MarcovandeVoort,我在 PE 中找到了“FPC 3.0.4 [2017/12/03] for x86_64 - Win64”字符串,还有“Lazarus LCL: 1.8.0.6 - FPC: 3.0.4”。我不知道哪些单位对此负责。
  • @MarcovandeVoort,同样有趣的是,当我使用 GDB 信息进行编译时,Exeinfo PE 显示“64 位可执行文件 -> *** 未知 EXE - CPU:AMD 标准编译器部分 [12] 部分覆盖:000000 ...什么都没发现”。

标签: lazarus freepascal portable-executable


【解决方案1】:

使用fpc自带的程序“strip”(在fpc/bin中)。

【讨论】:

  • 我尝试将它与每个选项一起使用,但它不起作用。请问有什么提示吗?
  • 对不起:我将您的问题与“调试器信息”混淆了。
  • 我把你的问题弄糊涂了。这意味着这个答案不适用,应该删除,不是吗?
  • 是的。但是如果我删除它,它后面的 cmets 会发生什么?他们会消失吗?如果是 - 很好,但为什么我可以删除别人写的东西?如果不是 - 结果会让读者非常困惑。
【解决方案2】:

lazarus 需要在单元中(lclbase?),也许 FPC 也需要(compiler/version.pas 是我的猜测)。但是潜在的 grepping 是很困难的,因为字符串可能是用 {$i %%} include meta data 构造的。

要解决这个问题,至少获得单元,还可以尝试将所有内容编译到汇编器(-a -s),然后 grep 生成的汇编器。汇编器将包含最终形式

字符串也可以由链接器添加,在 Windows 上,FPC 通常使用其内部(高速)链接器。您可以尝试使用外部 (GNU LD) 链接器 (-Xe) 来查看其行为是否不同。

【讨论】:

    猜你喜欢
    • 2016-09-01
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 2016-04-03
    • 2015-02-07
    相关资源
    最近更新 更多