Форматы исполняемых файлов: 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, импорты подсказывают функциональность. - Точка входа — место старта; адреса в файле и в памяти могут отличаться.