Ассемблер для 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

Смещение

Длина

Название

Комментарий

+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*? смещ. сегмент ... смещ. сегмент




Содержание  Назад  Вперед