从PE文件中删除DOS存根

时间:2012-03-11 13:17:18

标签: windows executable exe portable-executable

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

4 个答案:

答案 0 :(得分:13)

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的其余部分对于Windows超过16位Windows是可选的,可以为零,DOS存根是可选的,可以省略。

最小符合性PE文件以IMAGE_DOS_HEADER开头,其中e_magic设置为IMAGE_DOS_SIGNATURE,e_lfanew设置为sizeof(IMAGE_DOS_HEADER),紧接着是IMAGE_NT_HEADERS。

答案 1 :(得分:7)

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

答案 2 :(得分:4)

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

但是,嗯,发现this

答案 3 :(得分:0)

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