windows - PE .idata 部分

标签 windows visual-c++ linker reverse-engineering portable-executable

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

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

现在的导入目录是放在一个不同名称的部分中,还是我遗漏了什么?

最佳答案

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

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

enter image description here

enter image description here

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


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

enter image description here

关于windows - PE .idata 部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22651433/

相关文章:

c++ - 如何在 Windows 中使用 c/c++ 中的 curl 获取网络视频流的快照?

visual-studio-2010 - XMPP 客户端库 gloox - 链接器找不到符号

c++ - free.c 抛出异常 "this program has stopped working"

c++ - GetAsyncKeyState 使用 cin 创建问题

visual-studio-2008 - 在同一解决方案上交叉链接不同项目时,Visual Studio 2008 上的 C++ 链接问题

c - glibc链接差异导致段错误

c++ - DLL 导出函数签名

windows - 仅在出错时解析命令的输出,并且仅使用 native 批处理命令

c++ - 如何在 Windows 上为 C/C++ 中的文件预先分配空间?

visual-c++ - MSVC(和icc)自动调用memset C++