Similar presentations:
Формат PE
1.
Формат PE2.
Формат PE• Исполняемые модули Windows (.exe и .dll
файлы) имеют формат PE (Portable
Executable - переносимый исполняемый)
• PE представляет собой модифицированную
версию COFF формата файла для Unix.
(PE/COFF - альтернативный термин)
• PE представляет все данные необходимые
для проецирования (отображения) файла в
память.
• Предполагается, что модуль будет загружен
по определенным адресам в памяти, но в
случае необходимости он может быть
перемещен
• Модуль может использовать другие модули
(быть зависимым от других модулей). В этом
случае Windows загружает необходимые
модули автоматически.
3.
Формат PEПример запуска программы
Windows
1. Пользователь запускает
приложение Program.exe. Модуль
должен быть загружен по адресу
0x03 и зависит от других модулей:
• user32.dll
• kernel32.dll
• proglib.dll
Windows размещает Program.exe по
адресу 0x03, но управление модулю
не передается, пока не будут
загружены библиотеки, от которых он
зависит.
4.
Формат PEПример запуска программы
Windows
1. Windows загружает
соответствующие модули в
память.
Каждый модуль содержит адрес, по
которому его необходимо загрузить.
Если модуль отсутствует, приложение
Program.exe запущено не будет
Модуль proglib.dll зависит от
модуля add.dll, который должен
быть загружен по адресу 0x22
5.
Формат PEПример запуска программы
Windows
add.dll не может быть загружен по
адресу 0x22, так как произойдет
конфликт с kernel32.dll
Модуль содержит данные для
перемещения его по другим
адресам памяти. Windows загрузит
его по адресу 0xE1
6.
Формат PEПример запуска программы
Windows
1. add.dll загружается по адресу
0xE1
Программа готова к работе
7.
Формат PEОбщая структура PE файла
Заголовок DOS присутствует для
совместимости.
Заголовок Windows хранит основную
информацию о модуле, например
для какого процессора он
скомпилирован, по какому адресу
нужно загрузить модуль в память
Таблица объектов располагается
сразу после заголовков. Она хранит
информацию о разделах:
•Название раздела
•Смещение раздела в файле.
•Адрес, по которому необходимо
загрузить раздел.
•Размер раздела.
8.
Формат PEЗаголовок DOS
DOS_magic всегда равен 0x5A4D.
Это соответствует символам “MZ” инициалы Марка Збиковски, одного
из создателей MS-DOS.
DOS_lfarlc позволяет различать DOS
и Windows программы. Если
значение поля >=0x40, значит файл
содержит еще один заголовок
(обычно заголовок Windows)
DOS_lfanew содержит смещение
другого заголовка
9.
Формат PEПрограмма-заглушка
Любая программа для Windows содержит в себе также программу
для DOS. По умолчанию компоновщик добавляет небольшую
программу, сообщающую, что программа не может выполняться в
DOS.
10.
Формат PEЗаголовок Windows
Обязательный заголовок
Заголовок Windows состоит из
•Обязательного заголовка
•Необязательного заголовка
IMAGE_NT_SIGNATURE –
сигнатура заголовка,
соответствует строке «PE»
Machine – код процессора, для
которого скомпилирован файл
0x14C – Intel 386
0x8666 – AMD64
NumberOfSections – количество
разделов в файле
Characteristics – слово, каждый
бит которого является флагом
Примеры флагов:
•Исполняемый файл
•DLL
•32-битный файл
11.
Формат PE12.
Формат PEНеобязательный заголовок
IMAGE_DIRECTORY_ENTRY_EXPORT
Информация о функциях, которые
данный модуль делает доступными для
других модулей
IMAGE_DIRECTORY_ENTRY_IMPORT
Информация о модулях, от которых
зависит данный модуль. Содержит также
имена функций, которые планируется
импортировать из других модулей
IMAGE_DIRECTORY_ENTRY_RESOURCE
Информация о ресурсах (иконки, курсоры,
изображения), которые содержит данный
модуль
IMAGE_DIRECTORY_ENTRY_BASERELOC
Информация для правильного
перемещения файла в памяти
13.
Формат PEТаблица объектов (разделов)
Таблица объектов представляет
собой массив структур, каждая из
которых описывает раздел
Name – имя раздела
Misc/VirtualSize – точный размер
раздела в виртуальной памяти
VirtualAddress – адрес раздела в
памяти
SizeOfRawData – размер раздела
в файле, округленный до
значения FileAlignment
необязательного заголовка
PointerToRawData – смещение
раздела относительно начала
файла
Characteristics – флаги раздела.
Примеры флагов:
•Readable
•Executable
•Contains code
14.
Формат PE15.
Формат PEТипичные разделы
.text – раздел программного кода
(иногда называется CODE)
.data – инициализированные
данные (иногда DATA)
.textbss – неинициализированные
данные (иногда .bss)
.rdata – данные только для чтения
.rsrc – ресурсы
.idata – данные об импортируемых
функциях
.edata – данные об экспортируемых
функциях
.reloc – данные для перемещения
16.
Формат PEЭкспорт функций
Модуль экспортирует
функцию по имени или по
номеру.
Структуры, описывающие
экспорт, содержат всю
информацию, необходимую
для нахождения адреса
функции.
В данном примере для
функции не хранится
спецификация, т.е. тот, кто
будет ее вызывать обязан
знать количество и тип
параметров и тип
возвращаемого значения
Просмотр user32.dll с помощью PE Browser:
17.
Формат PEИмпорт функций
Просмотр explorer.exe с помощью PE Browser:
Для импорта модуль хранит
имя другого модуля и список
функций
Программный код,
использующий импортируемую
функцию, вызывает ее через
косвенную адресацию
«вызвать функцию,
находящуюся по адресу,
записанному вот в эту ячейку».
Загрузчик обязан сделать так,
чтобы к моменту начала
работы программы в «этой
ячейке» был правильный адрес
18.
Формат PEИскажение имен функций