在十六进制编辑器中查看PE文件时,我经常在节表和第一节之间遇到一些字节,这对我来说并没有多大意义。就我而言,应该有一个00字节的填充以适应对齐。但是,这是一个截然相反的截图:
http://img163.imageshack.us/img163/2390/pequestion.png
事实证明,突出显示的块几乎是绑定导入表。但我仍然感到困惑。为什么这张表不在一个部分?总是如此,还是仅仅是某个编译器/链接器的规范?我没有找到关于这个具体问题的任何文件。人们可以在这个主题上找到的一切基本上都说:
......等等
在我遇到这个问题之前,我甚至都没有意识到这些事情之外的事情(除了我上面列出的事情之外)。
[编辑]
概念证明(因为Mox不相信我):
答案 0 :(得分:3)
IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT
等数据目录可以存在于部分之外。存在于任何已知部分之外的数据目录的另一示例是IMAGE_DIRECTORY_ENTRY_CERTIFICATE
数据目录,其是用于在签署可执行文件时存储证书信息的数据目录。
数据目录可以指向某个部分之外的数据,也可以指向一个部分,或者它们可以指向整个部分。 IMAGE_DIRECTORY_ENTRY_RESOURCE
数据目录指向整个“.rsrc”部分。某些数据目录指向已知部分,这些部分记录在PE format specification by Microsoft。
答案 1 :(得分:1)
绑定导入表之类的项可以写在链接器想要将它们放在原始映像中的任何位置。它只是用表覆盖零字节,并使指针在数据目录中正确。您甚至可以使用导入表覆盖DOS标头或存根的中间位置,只要目录中的指针正确,它就会起作用。
答案 2 :(得分:0)
据LordPe所见,iexplore.exe的IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT条目为空。
答案 3 :(得分:0)
IEXPLORE.EXE的32位和64位版本都没有IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT条目。
这里是LordPE的快照,在Windows 7机器上显示64位版本的IEXPLORE.EXE,并且(绿色)显示缺少的IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT条目:
看起来你没有看到正确的目录条目。