В состав старого заголовка входят:
- обычный ЕХЕ-заголовок (Таблица А-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 |
Относительное смещение начала таблицы резидентного имени от начала нового заголовка |
||
Смещ. |
Описание |
|
+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Кбайт) |
|
| Смещ. | Описание |
| +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 | Смещение сегмента |