3

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

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

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

... 等等

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

[编辑]

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

主PE

4

4 回答 4

5

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

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

于 2012-10-06T22:05:43.950 回答
1

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

于 2012-12-06T15:51:13.317 回答
0

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

在此处输入图像描述

于 2012-09-15T07:18:26.847 回答
0

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

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

在此处输入图像描述

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

于 2012-09-17T07:50:37.573 回答