Секция экспорта ( edata) Общая структура
Секция экспорта (.edata). Общая структура
1. Таблица экспорта
Смещение
Длина поля
Название поля
Описание поля
00h DWORD Flags Зарезервировано, должно быть равно нулю. 04h DWORD Time/Date Stamp Время и дата создания экспортных данных. 08h WORD Major Version Старший номер версии таблицы экспорта. Не используется. 0Ah DWORD Minor Version Младший номер версии таблицы экспорта, также не используется. 0Ch DWORD Name RVA Относительный адрес строки, указывающей на имя нашей библиотеки. 10h DWORD Ordinal Base Начальный номер экспорта, для функций, экспортируемых данным модулем. 14h DWORD Num of Functions Количество функций экспортируемых данным модулем, является числом элементов массива Address Table (см.ниже). 18h DWORD Num of Name Pointers Число указателей на имена, обычно равно числу функций, но это не так, если у нас есть функции, экспортируемые только по номеру. 1Ch DWORD Address Table RVA Указатель на таблицу относительных адресов экспортируемых функций. 20h DWORD Name Pointers RVA Указатель на таблицу указателей на имена экспортируемых функций данного модуля. 24h DWORD Ordinal Table RVA Указатель на таблицу номеров экспорта, данный массив по индексам параллелен Name Pointers, элементами являются слова.2. Таблица адресов экспорта. Эта структура данных содержит адреса экспортируемых функций (их точки входа) в формате DWORD (по 4 байта на элемент). Для доступа к данным используется номер функции с коррекцией на базу номеров (Ordinal Base).
3. Таблица указателей на имена. Данная структура содержит указатели на имена экспортируемых функций, указатели отсортированы в лексическом порядке для обеспечения возможности бинарного поиска. Каждый указатель занимает 4 байта. Имена функций обычно лежат в секции экспорта.
4. Таблица номеров. Данная структура совместно с Name Table Pointers формирует два параллельных массива, разделенных для облегчения к ним доступа индексированием на родные для процессора данные (слова, двойные слова, но не сложные структуры). Данный массив содержит номера экспорта, которые в общем случае являются индексами в Address Table экспорта (за вычетом базы Ordinal Base). Элементами данного массива являются слова (2 байта).
5. Таблица имен экспорта. Эта таблица содержит необязательные (по мнению Microsoft) имена экспортируемых функций. Данный массив используется совместно с Name Table Pointers и Ordinal Table для обеспечения связывания загрузчиком импорта/экспорта по имени. Механизм описывался выше. Каждый элемент являет собой ASCIIZ строку с именем экспортируемой функции. Никто не говорит, что они должны в файле идти друг за другом последовательно, хотя так построено большинство файлов. Надо отметить, что имена экспорта чувствительны к регистру. Отметим особенность загрузчика - при связывании, если адрес функции находится в секции экспорта, на самом деле по указанному адресу лежит строка, переадресующая к другой библиотеке, экспортирующей данную функцию (с указанием библиотеки и самой функции). Это называется - передача экспорта.