PE.idata 部分

rwa*_*ace 5 windows linker reverse-engineering portable-executable visual-c++

根据我读过的文档,Windows 可执行文件的导入目录通常放置在名为.idata. (我知道这些名称实际上只是注释,但“通常...称为”大概意味着 Microsoft 工具链将默认使用该名称。)

当我使用 Microsoft 编译器编译并链接一个简单的 C 测试程序,然后转储结果时,没有名为的部分.idata. 然而,在可选标头中,有一个正的 RVA 和导入目录的大小,因此导入表就在那里。

现在导入目录是否放置在具有不同名称的部分中,或者我是否遗漏了某些内容?

Jon*_*art 4

事实上,在我刚刚构建的可执行文件中,没有任何.idata部分。

使用 PE Explorer,我们可以看到导入表和 IAT 存储为该.rdata部分的一部分。(注意“指向目录”列):

在此输入图像描述

在此输入图像描述

在“数据目录”页面上,我们看到导入表的虚拟地址是0x403354.rdata这落在( ) 部分的范围内0x403000 - 0x403C00


有趣的是(有点令人沮丧),IDA 的 PE 加载器综合地“创建”了一个文件中实际上.idata并不存在的部分:

在此输入图像描述

  • 如果您不希望出现此行为,可以在加载对话框中取消选中“创建导入段”。但随后您可能会得到不同的分析结果,因为某些代码依赖于“.idata”段的特殊属性,无论是否是人为的。 (3认同)