根据我读过的文档,Windows可执行文件的导入目录通常放在一个名为.idata
的部分。 (我知道这些名称实际上只是注释,但是“通常…被称为”大概意味着Microsoft工具链将默认使用该名称。)
当我编译和链接一个简单的Ctesting程序与微软编译器,然后dumpbin的结果,没有一节称为.idata
。 然而,在可选的标题中有一个肯定的RVA和导入目录的大小,所以导入表就在那里。
现在的导入目录是放在一个名称不同的部分,还是我错过了一些东西?
事实上,在我刚刚构建的可执行文件中,没有.idata
部分。
使用PE Explorer,我们可以看到导入表和IAT作为.rdata
部分的一部分存储。 (请注意“指向目录”一栏):
在Data Directories页面上,我们看到Import Table的虚拟地址是0x403354
。 这在.rdata
节( 0x403000 - 0x403C00
)范围内。
有趣的是(也有些令人沮丧的),IDA的PE加载程序综合地“创建”了一个.idata
节,它实际上并不存在于文件中: