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

问题描述 投票:0回答:4

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

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

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

...等等

在遇到这个问题之前,我什至没有意识到这一事实,即可能存在章节之外的内容(当然,除了我上面列出的内容之外)。

[编辑]

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

LordPE

windows executable portable-executable file-format coff
4个回答
5
投票

诸如

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

数据目录可以指向节外、节内的数据,也可以指向整个节。

IMAGE_DIRECTORY_ENTRY_RESOURCE
数据目录指向整个“.rsrc”部分。某些数据目录指向已知部分,这些数据记录在 Microsoft 的 PE 格式规范中。


1
投票
诸如绑定导入表之类的项目可以写入链接器想要将其放入原始图像中的任何位置。它只是用表覆盖零字节并使数据目录中的指针正确。您甚至可以用导入表覆盖 DOS 头或存根的中间部分,只要目录中的指针正确,它就可以工作。


0
投票
据我在LordPe中看到的,iexplore.exe的IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT条目是空的。

enter image description here


0
投票
32 位和 64 位版本的 IEXPLORE.EXE 都没有 IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 条目。

这里是 LordPE 的快照,显示了 Windows 7 计算机上的 64 位版本的 IEXPLORE.EXE 以及(绿色)缺少的 IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 条目:

enter image description here

看来您没有查看正确的目录条目。

© www.soinside.com 2019 - 2024. All rights reserved.