从PE文件中删除DOS存根

use*_*138 12 windows executable exe portable-executable

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

Sec*_*att 14

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.


mox*_*mox 7

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


小智 4

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

但是嗯,发现了这个

  • 如果你破坏了文件格式,那么它就不再是真正的PE文件了。您可以提供自定义存根。 (2认同)