Ассемблер для Windows

Структура исполняемых модулей



Глава 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

Смещение

Длина

Название

Комментарий



* Конец форматированной порции заголовка **

+1СН

** Начало таблицы перемещения (возможно с 1СН) **

+? 4*? смещ. сегмент ... смещ. сегмент



Содержание раздела






+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 для главного модуля