|
|
|
|
Формат программного файла типа .EXE
В отличие от программного файла типа .COM, который содержит только образ программы, файл программы типа .EXE должен содержать всю необходимую
информацию для настройки ссылок внутреннего сегмента. Также в связи с тем, что в программе типа .EXE не запрещено иметь свой особый стек или особую
начальную точку, программный файл типа .EXE должен содержать информацию для загрузчика с целью надлежащей инициализации программы.
Файл программы типа .EXE состоит из трех разделов: заголовка файла .EXE, таблицы настройки и образа программы. Заголовок файла .EXE показан в
таблице 3-4. Некоторые элементы в заголовке обеспечивают начальное состояние образа программы. Это: MinAlloc (минимальное распределение), MaxAlloc
(максимальное распределение) и начальные значения SS:SP и CS:IP. Другие элементы: настраиваемые элементы и смещение таблицы настройки позволяют
загрузчику обеспечивать доступ к таблице настройки процесса.
Каждый элемент в таблице настройки позволяет загрузчику разрешать ссылку одного сегмента внутри образа программы. Каждый элемент содержит
указатель длины (сегмента или смещения) для ссылки сегмента внутри образа загрузки. Указатель самого сегмента является относительным по отношению к
началу образа загрузки программы. Во время настройки начальная ссылка сегмента, включающая образ загрузки, обновляется для включения действительных
значений сегмента. Этот процесс мы рассмотрим более подробно только после того, как разберем один большой аспект файлов .EXE - начальные значения
распределения.
Таблица 3-4
Заголовок программного файла типа .EXE
________________________________________________________________
Шестнад-|
цатирич-|
ное сме-| Содержимое
щение |
_________|______________________________________________________
00 |Сигнатура. Маркер типа файла программы .EXE: 4D5H
|(шестнадцатиричное значение)
_________|______________________________________________________
02 |Остаток. Количество байтов на последней странице файла
|(размер образа загрузки модуля 512 байт)
_________|______________________________________________________
04 |Страницы. Количество 512-байтных страниц в файле,
|включая заголовок.
_________|______________________________________________________
06 |Элементы настройки. Количество элементов в таблице
|настройки.
_________|______________________________________________________
08 |Размер заголовка. Размер заголовка в 16-байтовых па-
|раграфах.
_________|______________________________________________________
0A |Минимальное распределение (MinAlloc). Минимальное ко-
|личество параграфов памяти, требуемое после конца
|программы.
_________|______________________________________________________
0C |Максимальное распределение (MaxAlloc). Максимальное
|количество параграфов памяти, требуемое после конца
|программы.
_________|______________________________________________________
0E |Стековый сегмент. Начальное значение для стекового
|сегмента (относительно начала образа загрузки програм-
|мы.
_________|______________________________________________________
10 |Указатель стека. Начальное значение указателя стека.
_________|______________________________________________________
12 |Контрольная сумма. Двоичное дополнение контрольной
|суммы программного файла.
_________|______________________________________________________
14 |Указатель инструкции. Начальное значение указателя
|инструкции.
_________|______________________________________________________
16 |Кодовый сегмент. Начальное значение кодового сегмента
|(относительно начала образа загрузки программы).
_________|______________________________________________________
18 |Смещение таблицы настройки. Относительное смещение
|байтов от начала программного файла в таблице настрой-
|ки.
_________|______________________________________________________
1A |Номер перекрытия. Номер перекрытия, сгенерированный
|компоновщиком LINK.
_________|______________________________________________________
|
|
|