PE(.exe)中的导入表

4
我找到了“导入表”字段的指针。它有8个字节大小,并分为虚拟地址和大小两部分。但是,在虚拟地址字段中的值过大,这使我无法提取任何与导入表条目相关的信息。如果该值指向偏移量,那么(.exe)文件在到达所需偏移量之前就已完成。
1个回答

9
目录表中导入目录的相对虚拟地址(RVA)必须有效。也许您将其转换为物理偏移量时出现了故障。当然,这是通过遍历节表以查找包含节的节来完成的。然后从目标 RVA 中减去该节的起始 RVA。然后将该节的物理偏移量简单地加到此结果中。这将为您提供导入目录在文件中的位置。如果使用磁盘上的文件,则可能经常需要将 RVA 转换为物理偏移量或将物理偏移量转换为 RVA。如果使用内存映像,则有时保护工具会修改或破坏内存中的 PE 标头的某些部分以防止转储。

一旦您到达导入目录,仍需继续工作。快速谷歌搜索显示了一个比我写在这里更好的解释:http://sandsprite.com/CodeStuff/Understanding_imports.html

我是现在已成为“经典”的 PECompact、PEBundle(现已停止使用)和其他 PE 操作实用程序的作者。


你能举个例子,说明如何使用十六进制编辑器找到导入目录吗? - iYonatan
我可以这样做,但你为什么要手动遍历像可移植可执行文件这样复杂的数据结构呢?除了学习目的外。即使是为了反向工程,也有很多工具可以反向 PE 结构(以及更多)。无论如何,基本上只需要找到并跟随 RVA,在文件规范/数据规范指定的地址到达导入表即可。 - dyasta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接