Win32 в машинных кодах


Исполняемые файлы Windows - часть 3


Теперь рассмотрим все подробнее. Поскольку попытка запуска создаваемых нами программ под DOS маловероятна, можно без особых проблем обойтись без программы-заглушки DOS. PE-заголовок в этом случае будет следовать сразу за старым заголовком DOS, а именно - непосредственно после 4-байтного поля со смещением 3Ch, т.е. по смещению 40h (само поле 3Ch будет содержать в данном случае это же значение). Единственное, что нужно еще оставить в старом заголовке - это сигнатуру в виде 2 ASCII-символов 'MZ' в начале файла (байты 4Dh 5Ah). Остальные поля могут содержать нули - загрузчик Windows их не использует.

Поля PE-заголовка приведены в таблице 1. Смещения указаны относительно начала заголовка, а жирным шрифтом выделены те поля, при неверных значениях которых Windows откажется загружать программу. Остальные поля либо содержат необязательные данные (например, указатель на размещение и размер отладочных данных), либо для них предусмотрены значения по умолчанию (как для размеров кучи и стека), либо используются лишь для определенных видов файлов (например, флаги dll или контрольная сумма).

Таблица 1. PE-заголовок

СмещениеРазмер, байтПолеТипичное значение

04Сигнатура 'PE'50h 45h 00 00

42Тип процессора14Ch

62Число секций в образе программы-

84Время/дата создания файла-

0Ch4Указатель на таблицу символов0

10h4Количество отладочных символов0

14h2Размер дополнительного заголовкаE0h

16h2Тип файла10Fh

18h2"Магическое" значение10Bh

1Ah1Старшая версия компоновщика-

1Bh1Младшая версия компоновщика-

1Ch4Размер кода-

20h4Размер инициализированных данных-

24h4Размер неинициализированных данных-

28h4Смещение точки входа-

2Ch4Смещение секции кода в памяти-

30h4Смещение секции данных в памяти-

34h4Адрес загрузки образа в память400000h

38h4Выравнивание секций в памяти1000h

3Ch4Выравнивание в файле200h

40h2Старшая версия Windows4

42h2Младшая версия Windows0

44h2Старшая версия образа-

46h2Младшая версия образа-




Начало  Назад  Вперед



Книжный магазин