Операционные системы. Курс лекций



Структура PE модуля


В начале PE модуля перед заголовком находится заглушка DOS, которая представляет собой минимальную DOS-программу («this program cannot run in DOS mode»).

Заголовок PE файла содержится после DOS заглушки и начинается с сигнатуры PE00.

Кроме сигнатуры заголовок содержит такую информацию как расположение и размер областей кода программ и данных, указание на то, с какой ОС предполагается использовать данный файл, а также начальный размер стека.

За сигнатурой PE00 следует сигнатура типа Image File Header. Поля этой сигнатуры содержат только самую общую информацию о файле.

После заголовка PE файла находится таблица секций. Эта таблица содержит инфу о каждой секции отображения.

Секции в отображении упорядочены по их стартовому адресу, а не в алфавитном порядке.

Таблица секций PE файла не хранит значение селектора для каждой части программного кода или данных. Вместо этого каждый элемент таблицы секций хранит адрес, по которому исходные данный файла были отображены в память.

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

Любая программа или данные, которые могут понадобиться программе или операционной системе, получают свою собственную секцию.

За таблицей секций располагаются сами секции. В первой располагается секция .text. В ней собран весь программный код общего назначения, генерируемый компилятором и ассемблером.

Поскольку PE файлы работают в 32-разрядном режиме, компоновщик объединяет все секции .text из различных объектных файлов в одну большую секцию .text в exe-файле. Кроме кода собственно программы в файле будет присутствовать дополнительный программный код в секции .text помимо того, который создается компилятором или используется из библиотек поддержки выполнения программы.




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