Разработка приложения, способного защищать исполняемые файлы, страница 4


Название нового формата файла – Portable Executable – «Переносимый исполняемый». Это означает, что приложения этого типа должны выполнятся на всех ОС семейства Windows. (Windows 9X, Win NT, Win 2000/XP). Подразумевается, что все новые ОС, выпускаемые  компанией MicroSoft, должны будут поддерживать этот формат файлов.

Рис. 1. Типовая структура PE файла

Типовая структура PE файла приведена на рисунке 1. В начале файла присутствует сигнатура и заголовок обыкновенного исполняемого файла MS-DOS. По смещению 3Ch хранится указатель на начало PE заголовка. Далее следует небольшая (как правило) программа, которая, в случае запуска под DOS выдаст сообщение о том, что программа способна работать только под управлением Windows. Эта программа называется «MS-DOS stub». Начало заголовка всегда выровнено на восьмибайтную границу. Заголовок состоит из двух частей: File Header и Optional Header. Первый имеет фиксированный размер. Размер второго указан в соответствующем поле в File Header. Структура File Header и Optional Header описана соответственно в таблицах 1 и 2. Optional Header для исполняемых файлов является обязательным, не смотря на его название. Начинается он с поля Magic Number. Если его значение равно 10Bh, файл имеет формат PE32. Наша программа работает только с ними.

Таблица 1. PEFileHeader

Смещение

Размер (байт)

Название поля

Описание

0

2

MachineType

Число, идентифицирующее аппаратную платформу

2

2

NumberOfSections

Количество секций в файле

4

4

TimeDateStamp

Дата и время создания файла

8

4

PointerToSymbolTable

Смещение символьной таблицы в файле

12

4

NumberOfSymbols

Количество записей в символьной таблице

16

2

SizeOfOptionalHeader

Размер Optional Header

18

2

Characteristics

Флаги, описывающие свойства данного файла

Некоторые термины, часто используемые при описании PE файлов, требуют пояснения. Виртуальный адрес — это адрес в 32-разрядном адресном пространстве данной программы. Относительный виртуальный адрес — это смещение в том же адресном пространстве относительно начала образа программы.


Таблица 2.PEOptionalHeader