На главную
Подписка
Новости










Главная / MS-DOS / MS-DOS. РУКОВОДСТВО РАЗРАБОТЧИКА / Глава 3 / Формат программного файла типа .EXE Сделать домашней страницей Добавить в избранное Написать писмо

НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Формат программного файла типа .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.
         _________|______________________________________________________

НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Hosted by uCoz