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 строку с именем экспортируемой функции. Никто не говорит, что они должны в файле идти друг за другом последовательно, хотя так построено большинство файлов. Надо отметить, что имена экспорта чувствительны к регистру. Отметим особенность загрузчика - при связывании, если адрес функции находится в секции экспорта, на самом деле по указанному адресу лежит строка, переадресующая к другой библиотеке, экспортирующей данную функцию (с указанием библиотеки и самой функции). Это называется - передача экспорта.