我在IDA注意到我分析的PE文件不仅有.rdata
部分,而且还有.idata
。有什么不同?.rdata和.idata片段有什么区别?
12
A
回答
26
.rdata
用于常量数据。它是.data段的只读版本。.idata
保存导入目录(.edata for exports)。它被EXE和DLL用来指定导入和导出的函数。有关详细信息,请参阅PE格式规范(http://msdn.microsoft.com/library/windows/hardware/gg463125)。
总结典型段名:
.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)
正如马丁罗西瑙提到,段名是唯一的典型。真正的段类型是在段头中指定的,或者是通过使用存储在段中的数据来定义的。
4
事实上,这些段的名称被Windows忽略。
有一些链接器使用不同的段名称,甚至可以在“.text”段中存储导入描述符,导出描述符,资源等,而不是使用单独的段。
但是,为这样的元数据创建单独的部分似乎更简单,因此大多数链接器将使用单独的部分。包含程序数据(尽管它们的名称以“data”结尾),但它们包含的元信息是:.idata,.rdata,.rsrc,... do 而不是由操作系统使用。例如,“.rsrc”部分保存有关在资源管理器中查看可执行文件时显示的图标的信息。
“.idata”包含有关程序所需的所有DLL文件的信息。
相关问题
- 1. 下两个片段有什么区别?
- 2. CPU和芯片组有什么区别?
- 3. 镜片和拉链有什么区别?
- 4. 索引和分片有什么区别
- 5. IPAddress.Any和IPAddress.IPv6Any字段有什么区别?
- 6. 创建片段与工厂方法和Fragment.instantiate有什么区别?
- 7. 样本,像素和片段之间有什么区别?
- 8. 有什么区别`和$(Bash中有什么区别?
- 9. 有什么区别? :和||
- 10. &&和||有什么区别?
- 11. “/”和“/ *”有什么区别?
- 12. 有什么区别:。!和:r!?
- 13. ==和===有什么区别?
- 14. Appender和〜有什么区别?
- 15. $ @和$ *有什么区别?
- 16. is和=有什么区别?
- 17. #.00和#。##有什么区别?
- 18. `==`和`is`有什么区别?
- 19. '=='和'==='有什么区别?
- 20. /和/#/有什么区别?
- 21. | 0和~~有什么区别?
- 22. `&`和`ref`有什么区别?
- 23. ==和===有什么区别?
- 24. ==和===有什么区别?
- 25. `{}`和`[]`有什么区别?
- 26. JavaScript和=== ===有什么区别?
- 27. difftime和' - '有什么区别?
- 28. =和==有什么区别?
- 29. 刀片和刀片之间有什么区别?
- 30. TPL Dataflow:这两个代码片段有什么区别?