PE

Материал из Russian Underground
Перейти к: навигация, поиск

PE - это сокращение от Portable Executable, т.е. переносимый (универсальный) исполняемый файл =) Этот формат появился еще в поздние времена Windows 3.11, но настоящее распространение получил с расцветом Windows 95. Можно сказать, что сейчас на компьютерах с Windows 9x/2K/XP/Vista/7 находится 95% исполняемых (exe, dll, драйверы(sys)) файлов - это PE файлы.

Содержание

Краткое описание формата PE-файла

PE файл имеет свою структуру. Очень вкратце я ее постараюсь описать. Вначале файла идет DOS заголовок, который включает в себя DOS MZ-заголовок и DOS-stub. DOS-stub, фактически, является полноценным exe, котоpый запускается опеpационной системой, не знающей о PE-фоpмате. Обычно в этом случае он пpосто отобpажает стpоку вpоде "This program cannot be run in DOS mode" или типа того =) Если же ОС - Windows, то DOS-stub не выполняется. Далее идет PE-заголовок (на самом деле между DOS заголовком и PE заголовком есть еще кое что, но я это описывать не буду, т.к. для начального понимания формата PE это не нужно). PE заголовок начинается с 4-х байтной сигнатуры, которая представляет из себя 2 байта - "PE" (4550h) и 2 байта равные 0. Далее идут различные данные, которые я описывать не буду. Их очень много и подробно вы можете посмотреть в cтандартном описании формата PE файлов. После PE заголовка идет таблица секций файла (Object Table), которая описывает параметры секций файла (секции кода, данных, ресурсов и т.д.), т.е. имя секции, ее Virtual Size, RVA, размер секции в файле, смещение секции в файле, характеристику секции. Количество таких структур в таблице секций равно количеству секций. Количество секций хранится в PE заголовке. После таблицы секций, идут страницы образов секций, то есть, попросту говоря, сами секции одна за другой.

Секция

См. Секция

TLS

TLS (Thread Local Storage, Локальная память потока) - Это 24-х (18h) байтная структура, причем 8 последних байт забито нулями, но это не принципиально. Родное место этой структуры в секции .rdata (по крайней мере, для программ, написанных на Delphi). Thread Local Storage используется для выделения областей памяти, используемых потоками (threads) для хранения данных. Интересной особенностью TLS является возможность выполнения программы до точки входа

Что означают все эти термины, которые мы видим при показе секций файла программами типа ProcDump, LordPE (на примере ProcDump): Name, Virtual Size, Virtual Offset, Raw Size, Raw Offset, Characteristics?

Name в данном случае - это имя секции. Оно может быть любым (максимальная длина - 8 символов), и его смена в общем случае не повлияет на работоспособность программы. За исключением секции имени секции ресурсов .rsrc Virtual Size - это размер данной секции в памяти. Virtual Offset - это смещение данной секции в памяти относительно Image Base, иными словами - это RVA этой секции. Raw Size - это размер данной секции в файле на диске. Raw Offset - это смещение данной секции в файле на диске относительно начала файла. Characteristics - это 4х байтное число, определяющее характеристику секции, ее свойства. Это число показывает является ли секция секцией исполняемого кода или нет, возможно ли чтение данных с этой секции, запись данных в эту секцию и т.д.

Личные инструменты
Пространства имён

Варианты
Действия
Навигация
Сцена
Материалы
Разное
Donate
Инструменты