Windows 从PE文件中删除DOS存根

Windows 从PE文件中删除DOS存根,windows,executable,exe,portable-executable,Windows,Executable,Exe,Portable Executable,可以从PE文件中删除DOS存根和DOS头吗?如果不破坏文件格式,很难删除它 但是发现了ehm。删除Dos存根与Dos头无关。是的,可以删除Dos存根(因为它不再使用)。您甚至可以将Dos标头的大小减小到其最小值(MZ+跳转到PE标头)。但不能完全删除Dos标头。否则,如果缺少MZ和跳转到PE头,Windows加载程序将拒绝启动您的映像。PE文件必须以image\u DOS\u头开头,然后在某个点后跟定义现代PE字段的image\u NT\u HEADERS结构 IMAGE_DOS_头有两个必填字

可以从PE文件中删除DOS存根和DOS头吗?

如果不破坏文件格式,很难删除它


但是发现了ehm。

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

PE文件必须以image\u DOS\u头开头,然后在某个点后跟定义现代PE字段的image\u NT\u HEADERS结构

IMAGE_DOS_头有两个必填字段-e_magic必须包含值IMAGE_DOS_签名(在ASCII中看起来像'MZ'),e_lfanew必须是从文件开始到IMAGE_NT_头开始的偏移量

除了这两个字段外,IMAGE_DOS_头的其余部分对于超过16位的窗口是可选的,可以为零,DOS存根是可选的,可以省略


最小一致性PE文件从一个IMAGE\u DOS\u头开始,其中e\u magic设置为IMAGE\u DOS\u签名,e\u lfanew设置为sizeof(IMAGE\u DOS\u头),紧接着是IMAGE\u NT\u头。

您不能将DOS头的大小减小到“最小”。不幸的是,长度字段是IMAGE_DOS_头中的最后一个字段。因此,它的固定大小为64字节。

我可以中断文件格式,但我需要知道如何在不中断exe的情况下执行该操作。如果中断文件格式,那么它就不再是真正的PE文件。您可以提供一个自定义存根。您可以使用PeStudio()检索任何可执行映像的DOS存根的实际大小。如果是谁否决了我的答案,请公平地评论否决票!谢谢,真的。刚刚退出的DOS.exe的最小大小为24+5=29字节。PE存根的最小大小为64字节,PE头偏移量存储在字节位置60和64之间。