Структура исполняемых модулей
Глава 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 для главного модуля |