PE文件中的DOS stub

5
最近,我使用十六进制编辑器分析了一些Windows可执行文件。PE头部从地址0x100开始,因此在PE映像实际开始之前有256个字节的数据。前256字节:

First 256 Bytes of a Windows executable

我了解以下文件结构信息:
  • 0x00 - 0x3F:这是MZ头(长度为64字节)。
  • 0x40 - 0x4D:这14个字节编码了七个x86(16位模式)指令,用于使用DOS系统调用(中断0x21)向屏幕打印“This program cannot run in DOS mode。\r\r\n”。
  • 0x4E - 0x78:这是字符串“This program cannot run in DOS mode。\r\r\n”,末尾带有美元符号,告诉DOS这是字符串的结尾。
  • 0x79 - 0x7F:这些是NULL字节;我猜它们被插入以进行对齐。

所以我知道前128个字节的作用。我的问题是:接下来的128个字节(0x80 - 0xFF)用于什么?(PE映像从0x100开始。)

1个回答

5
这是所谓的未记录"Rich header"。这是由Microsoft链接器插入的一个弱加密数据块,指示用于制作可执行文件的Microsoft工具。它包括从链接的目标文件中获取的版本信息,因此包括使用了什么编译器、汇编器和其他工具的信息。要解码Rich header,请搜索Rich标记,然后获取其后的32位加密密钥。然后从Rich标记开始向后工作,将密钥与存储在那里的32位值进行异或操作,直到找到已解码的DanS标记。在这两个标记之间将列出一系列32位值对。一对中的第一个值标识所使用的Microsoft工具,第二个值表示使用该工具创建了多少个链接的目标文件。工具ID值的上16位部分指示工具类型,下16位部分标识工具的构建版本。

这正是我正在寻找的信息,您提供的链接也非常有帮助。非常感谢! - Xaver

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接