Формат заголовка NE-executable ЕХЕ-файла
В состав старого заголовка входят:
- обычный ЕХЕ-заголовок (Таблица А-2);
- зарезервированная часть;
- указатель на новый заголовок (если в ЕХЕ-заголовке в начале таб-
лицы перемещаемых элементов - по смещению 18h - стоит 40h или
больше, то слово, расположенное по смещению 3Ch, содержит сме-
щение начала нового заголовка);
- DOS-программа (STUB).
В состав нового заголовка входят:
- инфоблок (Таблица А-3);
- таблица сегментов (Таблица А-4);
- таблица ресурсов (Таблица А-5);
- таблица резидентных имен;
- таблица ссылок на модули;
/
Таблица А-2. Формат обычного ЕХЕ-заголовка в NE-executable ЕХЕ-файпе.
Смещ. |
Описание |
+00h |
HdrSize - длина заголовка в параграфах (по 16 байт) |
+20h |
Резерв |
+3Ch |
Смещение начала нового заголовка |
+40h |
DOS-программа (STUB) |
Таблица А-3. Формат NE-заголовка.
Смещ. |
Описание |
|
+00h |
Сигнатура NE-executable ('NE') |
|
+02h |
Версия редактора связей |
|
+03h |
Номер версии редактора связей |
|
+04h |
Смещение таблицы входов (относительно начала заголовка) |
|
+06h |
Длина таблицы входов (в байтах) |
|
+08h |
Зарезервировано: 32-битная контрольная сумма |
|
+OCh |
Набор флагов: (16 бит) |
|
Бит 0 |
SINGLEDATA, в файле содержится только один сегмент данных. Если файл является DLL, бит устанавливается редактором связей |
Таблица А-3. Формат NE-заголовка. (Продолжение}
Смещ. |
Описание |
||
+OCh |
Набор флагов: (16 бит) |
||
Бит1 |
MULTIPLEDATA, в файле содержится несколько сегментов данных. Независимо от этого формат файла NOAUTODATA, и в нем нет автосегментов данных |
||
|
Бит 2 |
Зарезервировано |
|
|
БитЗ |
Файл может быть загружен только в защищенном режиме |
|
|
Бит 8 |
Содержится код, не совместимый с библиотеками MSWindows для OS/2 |
|
|
Бит 9 |
Код, совместимый с библиотеками MS Windows |
|
|
Бит 11 |
В первом сегменте содержится код, загружающий прикладную программу |
|
Бит 13 |
Файл был создан, несмотря на обнаруженные редактором связи ошибки |
||
Бит 14 |
Исполняемый файл размещается в EMS |
||
Бит 15 |
Библиотечный модуль. При загрузке библиотеки CS:IP указывает на процедуру инициализации, а регистр АХ равен определителю модуля |
||
+OEh |
Число автосегментов данных: если SINGLEDATA равен нулю, MULTIPLEDATA не указывается |
||
+10h |
Начальный размер (в байтах) локальной кучи. При ее отсутствии равен нулю |
||
+12h |
Начальный размер стека (в байтах). Равен нулю, если SS не равно DS, как в библиотеках |
||
+14h |
CS:IP |
||
+18h |
SS:SP |
||
+lCh |
Число входов в таблице сегментов |
||
+lEh |
Число входов в таблице ссылок на модули |
||
+20h |
Число байт в таблице нерезидентного имени i |
||
+22h |
Относительное смещение начала таблицы сегментов от начала нового заголовка |
||
+24h |
Относительное смещение начала таблицы ресурсов от начала нового заголовка |
||
+26h |
Относительное смещение начала таблицы резидентного имени от начала нового заголовка |
Таблица А-3. Формат NE-заголовка. (Окончание)
Смещ. |
Описание |
|
+28h |
Относительное смещение начала таблицы ссылок на модули от начала нового заголовка |
|
+2Ah |
Относительное смещение начала таблицы импортируемых имен от начала нового заголовка |
|
+2Ch |
Относительное смещение начала таблицы нерезидентных имен от начала файла |
|
+30h |
Число перемещаемых точек входа^- |
|
+32h |
Множитель смещении. Используется при размещении логических секторов. Выражается степенью логарифма по основанию 2. По умолчанию равен 9 (512) |
|
+34h |
Число ресурсных сегментов |
|
+36h |
Флаги, определяющие рабочую операционную систему |
|
Бит 0 |
Неизвестная |
|
Бит1 |
OS/2 |
|
Бит 2 |
Microsoft Windows |
|
БитЗ |
Зарезервировано |
|
Бит 4 |
Зарезервировано |
|
+37h |
Дополнительные флаги |
|
Бит1 |
Программа для Windows 2.x. Может быть запущена в защищенном режиме версии З.х |
|
Бит 2 |
Программа для 2.x. Может использовать пропорциональные шрифты |
|
БитЗ |
В файле содержится область быстрой загрузки |
|
+38h |
Указатель начала области быстрой загрузки (используется только Windows) |
|
+3Ah |
Длина области быстрой загрузки (используется только Windows) |
|
+3Ch |
Зарезервировано ' |
|
+3Eh |
Версия Windows (используется только Windows) |
Смещ. |
Описание |
|
+00h |
Смещение логического сектора (в байтах)относительно начала файла. При отсутствии сегмента данных равно нулю |
|
+02h |
Длина сегмента в файле. Если значение 0, то смещение 64 Кбайт |
|
+04h |
Флаги |
|
Бит 0 |
Сегмент данных, иначе сегмент кода |
|
Бит 1 |
В загрузчике имеется память, отведенная для сегмента |
|
Бит 2 |
Сегмент загружен |
|
БитЗ |
Зарезервировано |
|
Бит 4 |
MOVEABLE сегмент, иначе - FIXED |
|
БитЗ |
Сегмент PURE или SHAREABLE, иначе - IMPURE или NONSHAREABLE |
|
Бит 6 |
PRELOAD сегмент, иначе - LOADONCALL |
|
Бит? |
Для сегмента кода - EXECUTEONLY, для сегмента данных - READONLY |
|
Бит 8 |
В сегменте содержатся перемещаемые данные |
|
Бит 9 |
Подстраивающийся сегмент |
|
Биты 10,11 |
Зарезервировано |
|
Бит 12 |
Сбрасываемый (discardable) сегмент |
|
Биты 13-15 |
Зарезервировано |
|
+06h |
Минимальный объем (в байтах), необходимый для размещения сегмента (0 соответствует 64Кбайт) |
Таблица А-5. Формат таблицы ресурсов.
Смещ. | Описание |
+00h | Единица смещения данных ресурса |
+02h |
Тип ресурса. Если установлен старший бит, то это один из типов ресурсов, описанных в Windows.h, иначе это смещение относительно начала таблицы ресурсов строки, указывающей тип ресурса. Тип ресурса 0 указывает на конец записей ресурсов |
+04h | Число ресурсов данного типа |
+06h | Зарезервировано |
+OAh |
Смещение данных ресурса относительно начала файла в единицах, указанных в начале таблицы ресурсов |
Таблица А-5. Формат таблицы ресурсов. (Окончание) | ||
Смещ. | Описание | |
+OCh | Длина ресурса (в байтах) | |
+OEh | Флаги | |
Бит 4 | MOVEABLE | |
Бит 5 | PURE - возможность совместного использования | |
Бит 6 | PRELOAD - предварительно загружаемый | |
+10h |
Определяет (если старший бит равен единице) или указывает на ID ресурса смещение относительно начала таблицы ресурсов |
|
+12h | Зарезервировано | |
+16h | Длина или имя типа. Ноль находится в конце таблицы ресурсов | |
+17h | Определяет тип ресурса или текст имени. В имени различаются кейсы | |
Таблица А-6. Таблица входов перемещаемого сегмента. | ||
Смещ. | Описание | |
+00h | Флаги | |
Бит 0 | Экспортируемый вход | |
Бит1 | Сегмент совместно использует глобальный сегмент данных | |
Биты 3-7 |
Если в ЕХЕ-файле содержится код, выполняющий кольцевые переходы, то это - число слов, составляющих стек. Во время кольцевых переходов эти слова должны копироваться из одного кольца в другое |
|
+01h | Инструкция INT 3Fh | |
+03h | Номер сегмента |
Смещ. Описание | ||
+00h | Флаги | |
Бит 0 | Экспортируемый вход ' | |
Бит1 | Сегмент совместно использует глобальный сегмент данных | |
Биты 3-7 |
Если в ЁХЕ-файле содержится код, выполняющий кольцевые переходы, то это - число слов, составляющих стек. Во время кольцевых переходов эти слова должны копироваться из одного кольца в другое |
|
+01h | Смещение сегмента |
- таблица входов (Таблицы А-6 и А-7);
- таблица нерезидентных имен.
В заголовке нового стиля содержится вся информация, необходимая
для сегментированного исполняемого файла - заголовки таблицы сег-
ментов, ресурсов и имен.
Сразу за заголовком находится таблица сегментов. В ней содержится
описание каждого сегмента исполняемого файла.