【发布时间】:2012-09-07 02:51:23
【问题描述】:
在十六进制编辑器中查看 PE 文件时,我经常在节表和第一节之间遇到一些字节,这对我来说真的没有意义。就我而言,应该有一个 00 字节的填充以适应对齐方式。但是,这里有一个截屏,展示了相反的情况:
事实证明,突出显示的块几乎就是绑定导入表。但我仍然很困惑。为什么此表不在一个部分中?总是这样还是只是某个编译器/链接器的规范?我没有找到有关此特定问题的任何文档。关于这个主题的所有内容基本上都说:
- DOS MZ 头文件
- DOS 存根
- PE 标头
- 截面表
- 第 1 节
- 第 2 节
- 第 3 节
...等等
在我遇到这个问题之前,我什至没有意识到这些部分之外的东西(当然,除了我上面列出的那些)。
[编辑]
概念证明(因为 Mox 不相信我):
【问题讨论】:
-
你怎么能说突出显示的块是绑定导入表的一部分?您使用了哪些(其他)知名的 PE 工具来确认此断言?
-
@mox 好吧,这很容易。 DataDirectory 数组从偏移量 0x178 开始,到偏移量 0x1EF(包括两者)结束。该数组的第 12 个元素位于 0x1D0 并包含绑定导入表的 RVA。如果您查看屏幕截图,您可以很容易地看到该位置指向 0x2E8,这是突出显示部分的一部分。我还尝试用 00 填充选择,这会“破坏”二进制文件(无法再启动)。将 RVA 和 BIT 的大小设置为 0 会导致二进制文件重新启动,这只是另一个指示。但是,我也用 LordPE 仔细检查了它。
标签: windows executable portable-executable coff