在十六进制编辑器中查看PE文件时,我经常遇到节表和第一节之间的一些字节,这对我来说并没有什么意义。就我而言,应该有一个 00 字节的填充以适合对齐。然而,这里的屏幕截图演示了相反的情况:
事实证明,突出显示的块几乎就是绑定导入表。但我还是很困惑。为什么该表不位于某个部分中?情况总是如此还是只是某个编译器/链接器的规范?我没有找到关于这个特定问题的任何文档。人们能找到的关于这个主题的所有内容基本上都是这样的:
...等等
在遇到这个问题之前,我什至没有意识到这一事实,即可能存在章节之外的内容(当然,除了我上面列出的内容之外)。
[编辑]
概念证明(因为 Mox 不相信我):
诸如
IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT
之类的数据目录可以存在于节之外。存在于任何已知部分之外的数据目录的另一个示例是 IMAGE_DIRECTORY_ENTRY_CERTIFICATE
数据目录,它是在签署可执行文件时用于存储证书信息的数据目录。
数据目录可以指向节外、节内的数据,也可以指向整个节。
IMAGE_DIRECTORY_ENTRY_RESOURCE
数据目录指向整个“.rsrc”部分。某些数据目录指向已知部分,这些数据记录在 Microsoft 的 PE 格式规范中。
这里是 LordPE 的快照,显示了 Windows 7 计算机上的 64 位版本的 IEXPLORE.EXE 以及(绿色)缺少的 IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 条目:
看来您没有查看正确的目录条目。