从PE文件中删除DOS存根

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

没有简单的方法来删除它,而不会破坏文件格式。

但是,嗯,发现这一点 。

PE文件必须以IMAGE_DOS_HEADER开头,接着是IMAGE_NT_HEADERS结构,该结构定义现代PE字段。

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。

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

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