Структура исполняемых модулей
Глава 1. Структура исполняемых модулей
Исполняемым форматом в Windows является формат PE. Сокращение PE означает Portable Executable, т.е. переносимый исполняемый формат. Этот формат имеют как ЕХЕ-файлы, так и динамические библиотеки. Важно, что сейчас фирма Microsoft ввела "новый" формат и для объектных модулей - это COFF-формат (COFF - Common Object File Format), который, однако, на поверку оказался, в сущности, все тем же PE-форматом. Заметим в этой связи, что фирма Borland по-прежнему работает с объектными файлами, имеющими структуру OMF (Object Module Format). Старый NE-формат (NE - New Executable), используемый старой операционной системой Windows и рассчитанный на сегментную структуру памяти, ушел в небытие. Кроме того, есть еще формат VXD-драйверов - LE-формат (Linear Executable, т.е. линейный исполняемый). Этого формата мы коснемся, когда будем говорить о драйверах в операционной системе Windows. Таким образом, данная глава будет посвящена разбору структуры исполняемых РЕ-модулей. Поскольку в состав исполняемого РЕ-модуля входит и DOS-программа (STUB), мы начнем наше рассмотрение со структуры DOS-программ. Наше рассмотрение будет кратким, и мы воспользуемся таблицей из книги [1].
Структура ЕХЕ-программ для MS DOS
Смещение
Длина
Название
Комментарий
+0 2 MZподпись, признак ЕХЕ-программы +2 2 PartPag длина неполной последней страницы +4 2 PageCnt длина в страницах (512 б), включая заголовок и последнюю страницу +6 2 ReloCnt число элементов в таблице перемещения +8 2 HdrSize длина заголовка в параграфах +0AН 2 MinMem минимум требуемой памяти за концом программы +0CH 2 MaxMem максимум требуемой памяти за концом программы +0EН 2 ReloSS сегментный адрес стека +10H 2 EXESp значение регистра SP +12Н 2 ChkSum контрольная сумма +14Н 2 ExeIP значение регистра IP +16H 2 ReloCS сегментный адрес кодового сегмента +18H 2 TablOff смещение в файле первого элемента таблицы перемещения +1АН 2 Overlay номер оверлея, 0 для главного модуля
* Конец форматированной порции заголовка **
+1СН
** Начало таблицы перемещения (возможно с 1СН) **
+? 4*? смещ. сегмент ... смещ. сегмент