根据我阅读的文档,Windows 可执行文件的导入目录通常位于名为 .idata
的部分中。 (我知道这些名称实际上只是注释,但“通常...称为”大概意味着 Microsoft 工具链将默认使用该名称。)
当我使用 Microsoft 编译器编译和链接一个简单的 C 测试程序,然后转储结果时,没有名为 .idata
的部分。但是,在可选 header 中有一个正的 RVA 和导入目录的大小,因此导入表就在那里。
现在的导入目录是放在一个不同名称的部分中,还是我遗漏了什么?
最佳答案
确实,在我刚刚构建的可执行文件中,没有 .idata
部分。
使用 PE Explorer,我们可以看到导入表和 IAT 存储为 .rdata
部分的一部分。 (注意“指向目录”列):
在数据目录页面,我们看到导入表的虚拟地址是0x403354
。这位于 .rdata
部分的范围内 (0x403000 - 0x403C00
)。
有趣的是(也有点令人沮丧),IDA 的 PE 加载器综合“创建”了一个 .idata
部分,该部分实际上不存在于文件中:
关于windows - PE .idata 部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22651433/