В чем разница?rdata and.idata по сегментам?
Я заметил в IDA, что файл PE, который я анализирую, имеет не только , но и .idata
. Какая разница?
2 ответов
.rdata
для данных const. Это только для чтения версия .сегмент данных..idata
содержит каталог импорта (.еданные для экспорта). Он используется 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)
As Мартин Розенау упоминает, что названия сегментов являются типичными. Истинный тип сегмента указывается в заголовке сегмента или определяется использованием данных, хранящихся в сегменте.
фактически, имена сегментов игнорируются Windows.
есть компоновщики, которые используют разные имена сегментов, и даже можно хранить дескрипторы импорта,дескрипторы экспорта, ресурсы и т. д. в ".текст " сегмент вместо использования отдельных сегментов.
однако, кажется, проще создать отдельные разделы для таких метаданных, поэтому большинство компоновщиков будут использовать отдельные разделы.
Это означает: разделы ".idata по", ".данные rdata", ".rsrc",... do не содержат данные программы (хотя их имя заканчивается на "данные"), но они содержат метаинформацию, которая используется операционной системой. Этот." например, раздел" rsrc " содержит информацию о значке, который отображается при просмотре исполняемого файла в Проводнике.
".idata " содержит информацию обо всех DLL-файлах, требуемых программой.