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