Форматы исполняемых файлов: PE (Windows)

Разбираем, как устроен исполняемый файл Windows изнутри.

PE (Portable Executable) — формат исполняемых файлов Windows: .exe, .dll и другие.

Зачем знать формат файла

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

Структура PE сверху вниз

ЧастьЧто внутри
DOS-заголовокНачинается с сигнатуры MZ; историческое наследие, содержит ссылку на NT-заголовок.
NT-заголовкиСигнатура PE\0\0, описание машины (x86/x64), точка входа, размеры.
Таблица секцийСписок секций: имя, размер, права (чтение/запись/исполнение).
СекцииСам код и данные (см. ниже).

Типичные секции

  • .text — машинный код (исполняемый).
  • .data — изменяемые данные (глобальные переменные).
  • .rdata — константы, строки, таблица импортов.
  • .rsrc — ресурсы (иконки, диалоги).

Импорты и точка входа

Таблица импортов (Import Table) перечисляет функции из системных библиотек (например, CreateFileA из kernel32.dll), которые программа использует. Для реверсера это золото: по импортам можно догадаться, что делает программа — работает с файлами, сетью, реестром.

Точка входа (entry point) — адрес, с которого ОС начинает выполнение. С неё реверсер часто начинает разбор.

Как работает под капотом: загрузка в память

Адреса внутри PE условны (RVA — относительные виртуальные адреса). При запуске загрузчик ОС размещает секции в памяти по базовому адресу и при необходимости правит ссылки (релокации). Поэтому адрес в файле и адрес в памяти могут отличаться — это нужно держать в голове при отладке.

Частые ошибки

  • Путать смещение в файле и виртуальный адрес в памяти.
  • Искать код в .data вместо .text.

Итог

  • PE — формат исполняемых файлов Windows; начинается с MZ, дальше PE\0\0.
  • Код в .text, данные в .data/.rdata, импорты подсказывают функциональность.
  • Точка входа — место старта; адреса в файле и в памяти могут отличаться.
Проверьте себя
1. В какой секции PE-файла обычно лежит исполняемый машинный код?
A.data
B.text
C.rsrc
D.reloc
2. Чем полезна таблица импортов для реверсера?
AОна содержит исходный код
BПо именам импортируемых функций можно понять, что делает программа
CОна ускоряет выполнение
DОна хранит пароли