【问题标题】:Remove DOS stub from a PE file从 PE 文件中删除 DOS 存根
【发布时间】:2012-03-28 03:44:55
【问题描述】:

是否可以从 PE 文件中删除 DOS 存根和 DOS 标头??

【问题讨论】:

    标签: windows executable exe portable-executable


    【解决方案1】:

    没有简单的方法可以在不破坏文件格式的情况下删除它。

    但是嗯,找到了this

    【讨论】:

    • 我可以破坏文件格式,但我需要知道如何在不破坏 exe 的情况下做到这一点。
    • 如果你破坏了文件格式,那么它就不再是真正的PE文件了。您可以提供自定义存根。
    【解决方案2】:

    删除 Dos Stub 与 Dos 标头无关。是的,可以删除 Dos Stub(因为它不再使用)。您甚至可以将 Dos 标头的大小减小到最小(MZ + 跳转到 PE 标头)。但是您不能完全删除 Dos 标头。否则,如果 MZ 和到 PE 标头的跳转丢失,Windows 加载程序将拒绝启动您的图像。

    【讨论】:

    • 您可以使用 PeStudio (winitor.com) 检索任何可执行映像的 DOS Stub 的实际大小
    • 能否对我的回答投反对票,请公平并评论投反对票!谢谢。
    【解决方案3】:

    PE 文件必须以 IMAGE_DOS_HEADER 开头,后跟定义现代 PE 字段的 IMAGE_NT_HEADERS 结构。

    IMAGE_DOS_HEADER 有两个必填字段 - e_magic 必须保存值 IMAGE_DOS_SIGNATURE(在 ASCII 中看起来像 'MZ'),并且 e_lfanew 必须是从文件开头到 IMAGE_NT_HEADERS 开头的偏移量。

    除了这两个字段之外,IMAGE_DOS_HEADER 的其余部分对于 16 位以上的 Windows 是可选的,可以为零,DOS 存根是可选的,可以省略。

    符合最低要求的 PE 文件以 IMAGE_DOS_HEADER 开头,其中 e_magic 设置为 IMAGE_DOS_SIGNATURE,e_lfanew 设置为 sizeof(IMAGE_DOS_HEADER),紧随其后的是 IMAGE_NT_HEADERS。

    【讨论】:

      【解决方案4】:

      您不能将 Dos 标头的大小减小到“最小”。不幸的是,长度字段是 IMAGE_DOS_HEADER 中的最后一个字段。因此它的大小固定为 64 字节。

      【讨论】:

      • 确实如此。刚刚退出的 DOS .exe 的最小大小是 24 + 5 = 29 字节。 PE stub 的最小大小为 64 字节,PE 标头偏移存储在字节位置 60 和 64 之间。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-02
      • 1970-01-01
      • 1970-01-01
      • 2017-04-06
      • 1970-01-01
      • 2021-04-03
      相关资源
      最近更新 更多