【发布时间】:2012-03-28 03:44:55
【问题描述】:
是否可以从 PE 文件中删除 DOS 存根和 DOS 标头??
【问题讨论】:
标签: windows executable exe portable-executable
是否可以从 PE 文件中删除 DOS 存根和 DOS 标头??
【问题讨论】:
标签: windows executable exe portable-executable
没有简单的方法可以在不破坏文件格式的情况下删除它。
但是嗯,找到了this。
【讨论】:
删除 Dos Stub 与 Dos 标头无关。是的,可以删除 Dos Stub(因为它不再使用)。您甚至可以将 Dos 标头的大小减小到最小(MZ + 跳转到 PE 标头)。但是您不能完全删除 Dos 标头。否则,如果 MZ 和到 PE 标头的跳转丢失,Windows 加载程序将拒绝启动您的图像。
【讨论】:
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。
【讨论】:
您不能将 Dos 标头的大小减小到“最小”。不幸的是,长度字段是 IMAGE_DOS_HEADER 中的最后一个字段。因此它的大小固定为 64 字节。
【讨论】: