.rdata和.idata段之间有什么区别?

时间:2013-09-25 18:18:12

标签: windows reverse-engineering portable-executable

我在IDA中注意到,我分析的PE文件不仅包含.rdata部分,还包含.idata。有什么区别?

2 个答案:

答案 0 :(得分:38)

总结典型的细分名称:

.text: Code 
.data: Initialized data
.bss: Uninitialized data
.rdata: Const/read-only (and initialized) data
.edata: Export descriptors
.idata: Import descriptors
.reloc: Relocation table (for code instructions with absolute addressing when
          the module could not be loaded at its preferred base address)
.rsrc: Resources (icon, bitmap, dialog, ...)
.tls: __declspec(thread) data (Fails with dynamically loaded DLLs -> hard to find bugs)

正如Martin Rosenau所提到的,片段名称只是典型的。真实的段类型在段标题中指定,或者通过使用存储在段中的数据来定义。

答案 1 :(得分:7)

实际上,Windows会忽略这些段的名称。

有些链接器使用不同的段名称,甚至可以在“.text”段中存储导入描述符,导出描述符,资源等,而不是使用单独的段。

然而,为这样的元数据创建单独的部分似乎更简单,因此大多数链接器将使用单独的部分。

这意味着:章节“.idata”,“。rddd”,“。rsr”,... 包含程序数据(尽管它们的名称以“data”结尾)但它们包含操作系统使用的元信息。例如,“。rsr”部分包含有关在资源管理器中查看可执行文件时显示的图标的信息。

“。idata”包含有关程序所需的所有DLL文件的信息。