是否可以从PE文件中删除DOS存根和DOS标题?
答案 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字节的固定大小。