PE 文件格式 - 节表和第一节之间是什么?

use*_*887 3 windows executable coff portable-executable

在十六进制编辑器中查看 PE 文件时,我经常遇到节表和第一节之间的一些字节,这对我来说没有意义。就我而言,应该有一个 00 字节的填充以适应对齐。但是,这是一个屏幕截图,它演示了相反的情况:

事实证明,突出显示的块几乎是绑定导入表。但我仍然很困惑。为什么这个表不在一个节中?这是总是如此还是只是某个编译器/链接器的规范?我没有找到有关此特定问题的任何文档。关于这个主题的所有内容基本上都说:

  1. DOS MZ 标头
  2. DOS存根
  3. PE头
  4. 节表
  5. 第 1 节
  6. 第 2 节
  7. 第 3 节

... 等等

在我遇到这个问题之前,我什至不知道这些部分之外可能还有其他东西(当然,除了我上面列出的那些)。

[编辑]

概念证明(因为 Mox 不相信我):

洛德PE

Nat*_*iri 5

诸如 之类的数据目录IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT可以存在于节之外。存在于任何已知部分之外的数据目录的另一个示例是IMAGE_DIRECTORY_ENTRY_CERTIFICATE数据目录,它是在可执行文件被签名时用于存储证书信息的数据目录。

数据目录可以指向节外、节内的数据,也可以指向整个节。该IMAGE_DIRECTORY_ENTRY_RESOURCE数据目录指向整个“.rsrc”一节。某些数据目录指向已知部分,这些在MicrosoftPE 格式规范中进行了记录