Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #57, АВГУСТ 2005 г.

Анатомия файла

Иван Скляров

Спецвыпуск: Хакер, номер #057, стр. 057-026-5


Characteristics - характеристики секции, которые описаны в файле winnt.h. Из них я выбрал основные и привел их в отдельной таблице.

Cекции

За всеми заголовками в файле следуют тела секций. В Microsoft исторически сложились такие устойчивые названия секций: ".text", ".bss", ".data", ".rdata", ".edata", ".idata", ".rsrc", ".debug" и некоторые другие. Однако совсем не обязательно чтобы секции имели такие названия. Например, компиляторы от фирмы Inprise (бывшая Borland) присваивают секциям имена вида CODE, DATA и т.п. Кроме того, программист может создавать дополнительные секции со своими названиями. Наличие точки в начале секции также необязательно. Секции расположены вплотную друг к другу без промежутков, но это совсем не значит, что в самих секциях не бывает пустых мест. Каждая стандартная секция имеет определенное назначение, например:

в ".text" распложен код программы;

в ".bss" размещаются неинициализированные данные;

в ".data" - инициализированные данные;

в ".edata" – функции, экспортируемые файлом;

в ".idata" - таблицы импортируемых функций;

в ".rsrc" – ресурсы;

в сегменте ".rdata" - данные только для чтения (строки, константы, информация отладочного каталога).

Но это назначение секций не строгое, например, ".text" вполне может быть начинен обычными данными, а также экспортируемыми функциями. Некоторые секции имеют особый формат, сейчас внимание сосредоточу на них.

Секция экспорта (.edata)

В секции .edata представлен перечень функций и данных, которые PE-файл экспортирует для использования сторонними модулями. Сегмент экспорта стандартно состоит из следующих частей:

1. оглавление;

2. таблица указателей на экспортируемые имена;

3. таблица порядковых номеров функций;

4. таблица экспортируемых имен.

Оглавление представлено вот такой структурой:

typedef struct _IMAGE_EXPORT_DIRECTORY {

DWORD Characteristics;

DWORD TimeDateStamp;

WORD MajorVersion;

WORD MinorVersion;

DWORD Name;

DWORD Base;

DWORD NumberOfFunctions;

DWORD NumberOfNames;

DWORD AddressOfFunctions; // RVA from base of image

DWORD AddressOfNames; // RVA from base of image

DWORD AddressOfNameOrdinals; // RVA from base of image

} IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY;

Characteristics - в настоящее время не используется.

TimeDateStamp - время создания таблицы экспорта.

MajorVersion и MinorVersion - старший и младший номер версии файла.

Name - имя файла.

Base - начальный порядковый номер для экспортируемых функций (обычно 1).

NumberOfFunctions и NumberOfNames - содержат количество функций и имен функций, экспортируемых из файла.

AddressOfFunctions - относительный виртуальный адрес (RVA) на таблицу указателей экспортируемых функций.

AddressOfNames - это относительный виртуальный адрес (RVA) на таблицу экспортируемых имен.

AddressOfNameOrdinals - это относительный виртуальный адрес (RVA) на таблицу порядковых номеров функций.

Все три таблицы связаны между собой особым образом.

Назад на стр. 057-026-4  Содержание  Вперед на стр. 057-026-6