Приложение А

Форматы заголовков ЕХЕ-файлов
Формат заголовка обычного ЕХЕ-файла

Таблица А-1. Формат заголовка обычного ЕХЕ-файла.

Смещ.

Описание

+00h

Signature - сигнатура ЕХЕ-файла ('MZ'). Инициалы Марка Збиковски,
одного из разработчиков MS-DOS.

+02h

PartPag - длина последней станицы

+04h

PageCnt - длина файла в страницах (по 512 байт)

+06h

ReloCnt - число элементов в таблице настройки адресов

+08h

HdrSize - длина заголовка в параграфах (по 16 байт)

+OAh

MinMem - минимальный объем памяти, которую нужно выделить после
загруженного модуля (в параграфах)

+OCh

MaxMem - максимальный объем памяти, которую нужно выделить после
загруженного модуля (в параграфах)

+OEh

ReloSS - сегментное смещение сегмента стека (для установки SS)

+10h

ExeSP - значение SP, устанавливаемое при входе

+12h

ChkSum - контрольная сумма

+14h

ExelP - значение IP, устанавливаемое при входе (стартовый адрес)

+16h

ReloCS - сегментное смещение сегмента кода (для установки CS)

+18h

TablOff - смещение в файле первого элемента таблицы настройки адресов
(часто ICh)

+lAh

Overlay - номер оверлея (0 - для корневого модуля)

В начале ЕХЕ-файла расположена форматированная часть заголовка
ЕХЕ-файла (Таблица А-1).

Далее следует таблица настройки адресов (Relocation Table), состоящая
из длинных указателей (смещение:сегмент) на те слова в загрузочном
модуле, которые содержат настраиваемые сегментные адреса. Примеча-
ние: элементы таблицы настройки могут быть расположены не по
порядку.


Формат заголовка 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)


Таблица А-4. Формат таблицы сегментов.

Смещ.

Описание

+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

Номер сегмента

Таблица А-7. Таблица входов фиксированного сегмента.

Смещ. Описание

 

+00h

Флаги

Бит 0

Экспортируемый вход '

Бит1

Сегмент совместно использует глобальный сегмент данных

Биты 3-7

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

+01h

Смещение сегмента


- таблица импортируемых имен;

- таблица входов (Таблицы А-6 и А-7);

- таблица нерезидентных имен.

В заголовке нового стиля содержится вся информация, необходимая
для сегментированного исполняемого файла - заголовки таблицы сег-
ментов, ресурсов и имен.

Сразу за заголовком находится таблица сегментов. В ней содержится
описание каждого сегмента исполняемого файла.

Таблица ресурсов. Ресурсами являются все основные объекты интер-
фейса - диалоговые окна, меню, курсоры, растровые изображения, знач-
ки и так далее.

Формат таблицы ресурсов (смещения относительно начала входа каж-
дого ресурса). Значения в диапазоне смещений 02-12h повторяются
в таблице до тех пор, пока величина по смещению 02h не станет равной
нулю. Значения в диапазоне от OAh до 12h повторяются столько раз,
сколько указано по адресу 04h.

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

Данные в таблице находятся в виде:

- длина строки (равна нулю, если в таблице нет дополнительных
строк);

- строка резидентного имени (первая строка - имя модуля);

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

Таблица ссылок на модули. В ней содержится список смещений имен
модулей, хранящихся в таблице импортируемых имен. Каждый вход
в таблице есть двубайтное последовательное число.

Таблица импортируемых имен. В ней записаны имена модулей, импор-
тируемых в исполняемый файл. Каждый вход состоит из двух частей -
байта длины строки и собственно строки.

Таблица входов. В ней содержатся группы точек входа в исполняемый
файл.


Эти группы создаются редактором связей и последовательно пронуме-
рованы (начиная с 1). Каждая группа начинается с двухбайтного заго-
ловка, который содержит число входов в группе (OOh - конец таблицы)
и дополнительную информацию о сегменте (FFh - перемещаемый,
FEh - вход относится к константе, определенной внутри модуля, иначе
вход является индексом сегмента). Для перемещаемых сегментов каж-
дый вход состоит из шести байт, а для фиксированных - из трех.

Таблица нерезидентных имен. Содержит имена экспортируемых функ-
ций, содержащихся в исполняемом файле. Эти имена не всегда остают-
ся резидентными в памяти. Структура полностью совпадает со структу-
рой таблицы резидентных имен.

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

Таблица содержит:

- тип адресации (только сегмент, только смещение, или и то, и другое);

- тип перемещения (внутренняя ссылка, импортируемый порядковый
номер, импортируемое имя);

- номер сегмента или порядковый ID (для внутренних ссылок);

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

- индекс таблицы ссылок или смещение таблицы имен (для импорти-
руемых имен).

Формат заголовка PE-executable EXE-файла

В состав старого заголовка входят:

- обычный ЕХЕ-заголовок (Таблица А-8);

- зарезервированная часть;

Таблица А-8. Формат обычного ЕХЕ-заголовка в PE-executable ЕХЕ-файле.

Смещ.

Описание

+00h

DOS-заголовок

+20h

Резерв

+3Ch

Смещение начала РЕ-заголовка

+40h

DOS-программа (STUB)


Таблица А-9. Формат РЕ-заголовка.

—————г
Смещ.

— — — - — — — 1— — — — —•— —-—!—————————1
Описание

+00h

РЕ' • Сигнатура

+04h

Тип процессора:
OOOh - неизвестный тип
14Ch - 80386
14Dh - 80486
14Eh - 80586

+06h

Количество входов в таблице объектов

+08h

Время и дата создания или модификации файла линкером

+OCh

Зарезервировано

+14h

Количество необходимых байт в NT-заголовке

+16h

Флаги:
OOOOh - программные данные
0002h - запускаемый код (если этот бит не включен, значит во время
линковки произошли ошибки)
0200h - если код не может быть загружен с базы кода, то его не надо
загружать
2000h - библиотечные данные

+18h

Зарезервировано

+lAh

Версия и подверсия линковщика, создавшего данный файл

+lCh

Зарезервировано

+28h

Виртуальный адрес точки входа или процедуры инициализации
библиотеки

+2Ch

Зарезервировано

+34h

Смещение первого файла данных в файле

+38h

Выравнивание объектов. Содержит величину степени 2 числа, на которое
должны быть выровнены объекты. Число может быть в диапазоне между
512 и 256 Мбайт. По умолчанию - 64 Кбайт

+3Ch

Выравнивание файла. Содержит величину степени 2 числа, на которое
должны быть выровнены страницы. Число может быть в диапазоне между
512 и 64 Кбайт

+40h

Номера версии и подверсии операционной системы, необходимой для
запуска данной программы

+44h

Номера пользовательской версии и подверсии. Устанавливаются во время


Таблица А-9. Формат РЕ-эаголовка. (Продолжение)

Смещ.

Описание

+48h

Номера версии и подверсии подсистемы NT, необходимой для запуска
данной программы

+4Ch

Зарезервировано

+50h

Виртуальный размер данных программы (в байтах)

+54h

Полный размер заголовка (в байтах), включая DOS-заголовок (старый),
РЕ-заголовок и таблицу объектов

+58h

Контрольная сумма файла для запуска.
Устанавливается линковщиком в ноль

+5Ch

NT подсистема, необходимая для запуска данной программы:
OOOOh - неизвестная
0002h - графический интерфейс Windows
ОООЗЬ - консоль Windows
0005h - консоль OS/2
0007h - консоль Posix

+5Eh

Флаги DLL:
000 lh - процесс инициализации библиотеки
0002h - процесс завершения библиотеки
0004h - поток инициализации библиотеки
OOOSh - поток завершения библиотеки

+60h

Размер стека, необходимый программе

+64h

Обязательный размер стека

+68h

Размер локальной кучи, резервируемый для программы

+6Ch

Обязательный размер локальной кучи

+70h

Зарезервировано

+74h

Размер массива смещений/размеров, расположенного ниже

+78h

Смещение таблицы экспорта. Смещение отсчитывается от значения поля
34h (смещение первого байта данных в файле)

+7Ch

Полный размер таблицы экспорта

+80h

Смещение таблицы импорта. Смещение отсчитывается от значения
поля 34h (смещение первого байта данных в файле)

+84h

Полный размер таблицы импорта

+88h

Смещение таблицы ресурсов. Смещение отсчитывается от значения поля
34h (смещение первого байта данных в файле)

+8Ch

Полный размер таблицы ресурсов


Таблица А-9. Формат РЕ-заголовка. /Окончание)

- указатель на РЕ-заголовок (если в ЕХЕ-заголовке в начале таблицы
перемещаемых элементов - по смещению 18h - стоит 40h или боль-
ше, то слово, расположенное по смещению 3Ch, содержит смещение
начала РЕ-заголовка);

- DOS-программа (STUB).
В состав нового заголовка входят:

- РЕ-заголовок (Таблица А-9);

- таблица объектов (Таблица А-10);

- таблицы ресурсов, импортируемых и экспортируемых имен, на-
стройки адресов.


Таблица А-10. Формат таблицы объектов.

Смещ.

Описание

+00h

Имя объекта в формате ASCII, дополненное до восьми байт нулями

+08h

Виртуальный размер объекта. Размер памяти, который необходимо
выделить перед загрузкой объекта

+OCh

Смещение объекта в файле. Смещение отсчитывается от значения поля
34h в РЕ-заголовке (смещение первого байта данных в файле)

+10h

Физический размер инициализированных данных объекта.

+14h

Физическое смещение первой страницы объекта в файле. Смещение
отсчитывается от начала ЕХЕ-файла

+18h

Зарезервировано

+24h

Флаги объекта:
00000020h - объект кода
00000040h - объект инициализированных данных
OOOOOOSOh - объект неинициализированных данных
04000000h - объект не должен быть кеширован
OSOOOOOOh - объект не должен быть разбит на страницы
lOOOOOOOh - объект общего доступа
20000000h - выполняемый объект
40000000h - читаемый объект
SOOOOOOOh - записываемый объект

Сайт создан в системе uCoz