在十六进制编辑器中查看 PE 文件时,我经常遇到节表和第一节之间的一些字节,这对我来说真的没有意义。就我而言,应该有一个 00 字节的填充以适合对齐。然而,这里有一个截屏,展示了相反的情况:
事实证明,突出显示的 block 几乎就是绑定(bind)的导入表。但我仍然很困惑。为什么这张表不在一个部分?情况总是如此还是只是某个编译器/链接器的规范?我没有找到有关此特定问题的任何文档。人们可以找到的关于这个主题的所有内容基本上都是这样说的:
- DOS MZ 标题
- DOS stub
- PE header
- 分区表
- 第 1 部分
- 第 2 部分
- 第 3 部分
...等等
在我遇到这个问题之前,我什至没有意识到这些部分之外可能还有一些东西(当然除了我上面列出的那些)。
[编辑]
概念证明(因为 Mox 不相信我):
最佳答案
IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT
等数据目录可以存在于部分之外。存在于任何已知部分之外的数据目录的另一个示例是 IMAGE_DIRECTORY_ENTRY_CERTIFICATE
数据目录,它是在对可执行文件进行签名时用于存储证书信息的数据目录。
数据目录可以指向节外、节内的数据,也可以指向整个节。 IMAGE_DIRECTORY_ENTRY_RESOURCE
数据目录指向整个“.rsrc”部分。某些数据目录指向已知部分,这些记录在 PE format specification by Microsoft 中.
关于windows - PE 文件格式 - 节表和第一节之间是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12416054/