Лекция 6. Запуск...

38
Начало Формат заголовков исполняемых файлов Формат секций Создание процесса Название Лекция 6. Запуск процесса Архитектура ОС Windows 7 ноября 2013 г. Лекция 6 1 / 38

Transcript of Лекция 6. Запуск...

Page 1: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Название

Лекция 6. Запуск процессаАрхитектура ОС Windows

7 ноября 2013 г.

Лекция 6 1 / 38

Page 2: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных

Секции модуля

не используется

.reloc

другие секции

.data

.text

таблица секций

заголовок PE

заголовок DOS

в файле

другие секции

.data

.text

таблица секций

заголовок PE

заголовок DOS

в памяти

Рис. 1: секции модуля

Лекция 6 2 / 38

Page 3: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных

Секции

Название Назначение.text Секция кода.data Секция данных чтения/записи. Глобальные переменные..rdata Секция данных только на чтение. Строковые литералы, таб-

лицы виртуальных функций C++/COM..idata Таблица импорта. Обычно → .rdata.edata Таблица экспорта (.exp). Обычно → .text или .rdata.rsrc Ресурсы, только для чтения. Не должна иметь другого на-

звания и сливаться с другими секциями..bss Неинициализированные данные (обычно вместо — .data

с достаточным размером— VirtualSize).

Таблица 1: стандартные секции

Лекция 6 3 / 38

Page 4: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных

Секции (окончание)

Название Назначение.crt Данные для поддержки библиотеки времени выполнения

C++..tls Данные локального хранилища потока (TLS): начальные

значения, . . .(__declspec (thread) DWORD gt_dwStartTime = 0;)

.reloc Базовые смещения в исполняемом файле. Как правило,DLL. Удаляется с ключом /FIXED

.didat Таблица импорта для библиотек с отложенной загрузкой.

Таблица 2: стандартные секции (окончание)

Лекция 6 4 / 38

Page 5: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных

Пример общих данных

Пример

#pragma data_seg(".shared")

int g_n = 10; // Инициализация!

#pragma data_seg()#pragma comment(linker, "/SECTION:.shared,RWS")

int g_n2;

// . . .

Лекция 6 5 / 38

Page 6: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных

Формат файла PE

Заголовок MS-DOSне используется

Информация OEM

Смещение PE (e_lfanew)

Заглушка MS-DOS

Секция MS-DOS

не используется

Заголовки секций

Таблица импорта

Таблица экспорта

Базовые перемещения

Ресурсы

Рис. 2: формат Portable Executable

Лекция 6 6 / 38

Page 7: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных

Формат секции COFF

Заголовок COFF

Заголовки секций

Двоичные данные:

КодДанные

Отладочная информация

Перемещения

Рис. 3: формат Portable Executable

Лекция 6 7 / 38

Page 8: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных

Заголовки NT

IMAGE_NT_HEADERS

typedef struct _IMAGE_NT_HEADERS{DWORD Signature; // PE\0\0IMAGE_FILE_HEADER FileHeader; // COFFIMAGE_OPTIONAL_HEADER32 OptionalHeader;

}IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;

Лекция 6 8 / 38

Page 9: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных

Просмотр структуры файла

Рис. 4: окно программы PEBrowse64

Лекция 6 9 / 38

Page 10: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных

Поля заголовка файла

Название НазначениеMachine Целевая архитектура процессора.NumberOfSections Количество секций (таблица секций сразу после

IMAGE_NT_HEADERS)TimeDateStamp Дата создания файлаPointerToSymbolTable Смещение таблицы символов COFF (в основ-

ном, для OBJ-файлов), можно 0.NumberOfSymbols Количество символов COFFSizeOfOptionalHeader Размер заголовка IMAGE_OPTIONAL_HEADER— сра-

зу после IMAGE_FILE_HEADER (0 для OBJ-файлов)Characteristics Набор флагов

Таблица 3: формат заголовка COFF (IMAGE_FILE_HEADER, . . . )

Лекция 6 10 / 38

Page 11: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных

Архитектуры

IMAGE_FILE_MACHINE_UNKNOWNIMAGE_FILE_MACHINE_AMD64IMAGE_FILE_MACHINE_ARMIMAGE_FILE_MACHINE_ARMNTIMAGE_FILE_MACHINE_ARM64IMAGE_FILE_MACHINE_EBCIMAGE_FILE_MACHINE_I386IMAGE_FILE_MACHINE_IA64IMAGE_FILE_MACHINE_THUMB

. . .

Таблица 4: константы типов архитектур

Лекция 6 11 / 38

Page 12: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных

Характеристики

IMAGE_FILE_RELOCS_STRIPPEDIMAGE_FILE_EXECUTABLE_IMAGEIMAGE_FILE_LARGE_ADDRESS_AWAREIMAGE_FILE_32BIT_MACHINEIMAGE_FILE_DEBUG_STRIPPEDIMAGE_FILE_REMOVABLE_RUN_FROM_SWAPIMAGE_FILE_NET_RUN_FROM_SWAPIMAGE_FILE_DLL

. . .

Таблица 5: константы характеристик

Лекция 6 12 / 38

Page 13: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных

Пример заголовка файла (notepad.exe)

Пример (IMAGE_FILE_HEADER)

Machine: AMD64NumberOfSections: 6TimeDateStamp: 0x4A5BC9B3PointerToSymbolTable: 0x00000000NumberOfSymbols: 0x00000000SizeOfOptionalHeader: 0x00F0Characteristics: 0x0022

EXECUTABLE_IMAGELARGE_ADDRESS_AWARE

Лекция 6 13 / 38

Page 14: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных

Поля дополнительного заголовка

Название НазначениеСтандартные поля

AddressOfEntryPoint RVA первого байта точки входа или 0.BaseOfCode RVA первого байта кодаBaseOfData RVA первого байта данных (нет в PE32+)

Поля, специфичные для Windows (только файл образа)ImageBase Предпочтительный адрес загрузки модуля (по

умолчанию 0x00400000 для EXE, 0x10000000 дляDLL, VA = ImageBase + RVA).

SectionAlignment Выравнивание секций в памяти (0x1000)FileAlignment Выравнивание секций в файле (0x200)SizeOfImage RVA ячейки за последней секцией (в памяти)SizeOfHeaders Размер всех заголовков до первой секции (в фай-

ле)

Таблица 6: основные поля IMAGE_OPTIONAL_HEADER

Лекция 6 14 / 38

Page 15: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных

Поля дополнительного заголовка (окончание)

Название НазначениеSubsystem ПодсистемаDllCharacteristics Характеристики динамической библиотекиSizeOfStackReserve Зарезервированный объём стека основного пото-

каSizeOfStackCommit Изначально выделенный объём стекаSizeOfHeapReserve Зарезервированный объём кучиSizeOfHeapCommit Изначльно выделенный объём кучиNumberOfRvaAndSizes Количество элементов таблицы каталога данных

за концом IMAGE_OPTIONAL_HEADER. Каждый опре-деляет RVA и размер.

Таблица 7: основные поля IMAGE_OPTIONAL_HEADER (окончание)

Лекция 6 15 / 38

Page 16: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных

Подсистема

IMAGE_SUBSYSTEM_UNKNOWNIMAGE_SUBSYSTEM_NATIVEIMAGE_SUBSYSTEM_WINDOWS_GUIIMAGE_SUBSYSTEM_WINDOWS_CUIIMAGE_SUBSYSTEM_POSIX_CUIIMAGE_SUBSYSTEM_EFI_APPLICATIONIMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVERIMAGE_SUBSYSTEM_EFI_ROM

. . .

Таблица 8: константы подсистем

Лекция 6 16 / 38

Page 17: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных

Элементы таблицы каталога данных

IMAGE_DATA_DIRECTORY

typedef struct _IMAGE_DATA_DIRECTORY{DWORD VirtualAddress; // RVA (относительно ImageBase)DWORD Size;

}IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;

Лекция 6 17 / 38

Page 18: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных

Индексы каталога данных

Индекс СекцияIMAGE_DIRECTORY_ENTRY_EXPORT .edataIMAGE_DIRECTORY_ENTRY_IMPORT .idataIMAGE_DIRECTORY_ENTRY_RESOURCE .rsrcIMAGE_DIRECTORY_ENTRY_BASERELOC .relocIMAGE_DIRECTORY_ENTRY_DEBUG .debugIMAGE_DIRECTORY_ENTRY_TLS .tlsIMAGE_DIRECTORY_ENTRY_IAT —IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT .didata

. . .

Таблица 9: константы индексов основных элементов каталога данных

Лекция 6 18 / 38

Page 19: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных

Пример дополнительного заголовка (notepad.exe)

Пример (IMAGE_OPTIONAL_HEADER)

Magic: 0x020BMajorLinkerVersion: 0x09MinorLinkerVersion: 0x00SizeOfCode: 0x0000A800SizeOfInitializedData: 0x00025800SizeOfUninitializedData: 0x00000000AddressOfEntryPoint: 0x00003570BaseOfCode: 0x00001000ImageBase: 0x00000001‘00000000SectionAlignment: 0x00001000FileAlignment: 0x00000200MajorOperatingSystemVersion: 0x0006MinorOperatingSystemVersion: 0x0001MajorImageVersion: 0x0006

Пример (продолжение)

MinorImageVersion: 0x0001MajorSubsystemVersion: 0x0006MinorSubsystemVersion: 0x0001Win32VersionValue: 0x00000000SizeOfImage: 0x00035000SizeOfHeaders: 0x00000600CheckSum: 0x0003E749Subsystem: 0x0002WINDOWS_GUI

DllCharacteristics: 0x8140DLL can move.Image is NX compatible.TERMINAL_SERVER_AWARE

Лекция 6 19 / 38

Page 20: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных

Пример дополнительного заголовка (окончание)

Пример (окончание)

SizeOfStackReserve: 0x0000000000080000SizeOfStackCommit: 0x0000000000011000SizeOfHeapReserve: 0x0000000000100000SizeOfHeapCommit: 0x0000000000001000LoaderFlags: 0x00000000NumberOfRvaAndSizes: 0x00000010IMAGE_DIRECTORY_ENTRY_EXPORT (0)

VirtualAddress: 0x00000000Size: 0x00000000

IMAGE_DIRECTORY_ENTRY_IMPORT (1)VirtualAddress: 0x0000CFF8Size: 0x0000012C

...

Лекция 6 20 / 38

Page 21: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Формат заголовка секций (IMAGE_SECTION_HEADER)Таблица экспортаТаблица импортаТаблица перемещений

Заголовки секций (после дополнительного заголовка)

Название НазначениеName Название (до 8 символов).VirtualSize Размер в памяти (для исполняемых образов).VirtualAddress RVA начала секции (для исполняемых образов).SizeOfRawData Размер проинициализированных данных (6

VirtualSize).PointerToRawData Файловая позиция начала данных (кратно

FileAlignment).PointerToRelocations Файловая позиция начала данных перемещения

или 0.Characteristics Флаги секции.

Таблица 10: основные поля IMAGE_SECTION_HEADER

Лекция 6 21 / 38

Page 22: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Формат заголовка секций (IMAGE_SECTION_HEADER)Таблица экспортаТаблица импортаТаблица перемещений

Флаги секций

IMAGE_SCN_CNT_CODEIMAGE_SCN_CNT_INITIALIZED_DATAIMAGE_SCN_CNT_UNINITIALIZED_DATAIMAGE_SCN_LNK_NRELOC_OVFLIMAGE_SCN_MEM_DISCARDABLEIMAGE_SCN_MEM_NOT_CACHEDIMAGE_SCN_MEM_NOT_PAGEDIMAGE_SCN_MEM_SHAREDIMAGE_SCN_MEM_EXECUTEIMAGE_SCN_MEM_READIMAGE_SCN_MEM_WRITE

. . .

Таблица 11: константы подсистем

Лекция 6 22 / 38

Page 23: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Формат заголовка секций (IMAGE_SECTION_HEADER)Таблица экспортаТаблица импортаТаблица перемещений

Примеры характеристик основных секций

Имя Характеристики.text IMAGE_SCN_CNT_CODE |

IMAGE_SCN_MEM_EXECUTE |IMAGE_SCN_MEM_READ

.data, .idata, .tls IMAGE_SCN_CNT_INITIALIZED_DATA |IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE

.rdata, .edata, .rsrc IMAGE_SCN_CNT_INITIALIZED_DATA |IMAGE_SCN_MEM_READ

.reloc IMAGE_SCN_CNT_INITIALIZED_DATA |IMAGE_SCN_MEM_READ |IMAGE_SCN_MEM_DISCARDABLE

.bss IMAGE_SCN_CNT_UNINITIALIZED_DATA |IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE

. . .

Таблица 12: сочетания характеристик для основных секций

Лекция 6 23 / 38

Page 24: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Формат заголовка секций (IMAGE_SECTION_HEADER)Таблица экспортаТаблица импортаТаблица перемещений

Примеры заголовков секций (notepad.exe)

Пример (IMAGE_SECTION_HEADER)

Name: .textVirtualSize: 0x0000A770VirtualAddress: 0x00001000SizeOfRawData: 0x0000A800PointerToRawData: 0x00000600PointerToRelocations: 0x00000000PointerToLinenumbers: 0x00000000NumberOfRelocations: 0x00000000NumberOfLinenumbers: 0x00000000Characteristics: 0x60000020

Contains code.Is executable.Is readable.

Пример (окончание)

Name: .rdataVirtualSize: 0x00003160VirtualAddress: 0x0000C000SizeOfRawData: 0x00003200PointerToRawData: 0x0000AE00PointerToRelocations: 0x00000000PointerToLinenumbers: 0x00000000NumberOfRelocations: 0x00000000NumberOfLinenumbers: 0x00000000Characteristics: 0x40000040Contains initialized data.Is readable.

Лекция 6 24 / 38

Page 25: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Формат заголовка секций (IMAGE_SECTION_HEADER)Таблица экспортаТаблица импортаТаблица перемещений

Таблицы экспорта

Название НазначениеЭкспорт по порядковым номерам

Таблица каталога экспорта Содержит расположения и размерыостальных таблиц экспорта.

Таблица экспорта адресов (EAT) Массив RVA экспортируемых симво-лов (или строк перенаправления).

Экспорт по именамТаблица указателей имён Массив указателей на экспортртуе-

мые символы, сортированные в по-рядке возрастания.

Таблица номеров Массив порядковых номеров, ∼ эле-ментам предыдущего массива.

Таблица экспортируемых имён Серия строк, на которые ссылаютсяуказатели.

Таблица 13: таблицы экспорта

Лекция 6 25 / 38

Page 26: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Формат заголовка секций (IMAGE_SECTION_HEADER)Таблица экспортаТаблица импортаТаблица перемещений

Секция импорта

Таблица каталога импорта

Нулевая запись

Таблица поиска импортабиблиотеки 1

NULL

Таблица поиска импортабиблиотеки 2

NULL

. . .

Рис. 5: структура секции импорта

Лекция 6 26 / 38

Page 27: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Формат заголовка секций (IMAGE_SECTION_HEADER)Таблица экспортаТаблица импортаТаблица перемещений

Запись таблицы каталога импорта

Название НазначениеOriginalFirstThunk RVA таблицы поиска импорта (несвязанной IAT).Name RVA имени библиотеки.FirstThunk RVA IAT.

Таблица 14: основные поля IMAGE_IMPORT_DESCRIPTOR

0153163

флаг 00 . . . 0 позиция

RVA подсказки/имени

Рис. 6: формат записи таблицы поиска имени (32/64 бит)

Лекция 6 27 / 38

Page 28: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Формат заголовка секций (IMAGE_SECTION_HEADER)Таблица экспортаТаблица импортаТаблица перемещений

Запись таблицы подсказки/имени

Название НазначениеПодсказка Индекс в таблице указателей экспортируемых имён.Имя ASCII-строка.

Таблица 15: основные поля таблицы подсказки/имени

Лекция 6 28 / 38

Page 29: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Формат заголовка секций (IMAGE_SECTION_HEADER)Таблица экспортаТаблица импортаТаблица перемещений

Пример

Пример

void MyFunction();

Пример

__declspec(dllimport) void MyFunction();

Пример

call 0x0040100C ; ∼ MyFunction; . . .0x0040100C: jmp dword ptr [0x00405030] ; ∼ __imp__MyFunction

Пример

call dword ptr [0x00405030]

Лекция 6 29 / 38

Page 30: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Формат заголовка секций (IMAGE_SECTION_HEADER)Таблица экспортаТаблица импортаТаблица перемещений

Пример таблицы импорта (notepad.exe)

Пример (таблица импорта)

OriginalFirstThunk: 0x0000D1E8TimeDateStamp: 0xFFFFFFFFForwarderChain: 0xFFFFFFFFName: 0x0000D1D4 - ADVAPI32.dllFirstThunk: 0x0000C0000x10000D1E8: 00000000‘0000D9D8 000007FF‘7FF21ED0 (638, RegSetValueExW)0x10000D1F0: 00000000‘0000D9EA 000007FF‘7FF2C2D0 (622, RegQueryValueExW)0x10000D1F8: 00000000‘0000D9FE 000007FF‘7FF21F00 (572, RegCreateKeyW)0x10000D200: 00000000‘0000DA0E 000007FF‘7FF30710 (560, RegCloseKey)0x10000D208: 00000000‘0000DA1C 000007FF‘7FF306F0 (609, RegOpenKeyExW)0x10000D210: 00000000‘0000DA2C 000007FF‘7FF30720 (384, IsTextUnicode)...

Лекция 6 30 / 38

Page 31: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Формат заголовка секций (IMAGE_SECTION_HEADER)Таблица экспортаТаблица импортаТаблица перемещений

Пример таблицы адресов импорта (notepad.exe)

Пример (таблица импорта)

Table: 10x000000010000C000: IATEntry001: 0x000007FF‘7FF21ED00x000000010000C008: IATEntry002: 0x000007FF‘7FF2C2D00x000000010000C010: IATEntry003: 0x000007FF‘7FF21F000x000000010000C018: IATEntry004: 0x000007FF‘7FF307100x000000010000C020: IATEntry005: 0x000007FF‘7FF306F00x000000010000C028: IATEntry006: 0x000007FF‘7FF307200x000000010000C030: IATEntry007: 0x000007FF‘7FF27E040x000000010000C038: IATEntry008: 0x000007FF‘7FF1C2A80x000000010000C040: IATEntry009: 0x000007FF‘7FF1C2C00x000000010000C048: IATEntry010: 0x000007FF‘7FF1C6FC...

Лекция 6 31 / 38

Page 32: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Формат заголовка секций (IMAGE_SECTION_HEADER)Таблица экспортаТаблица импортаТаблица перемещений

Пример

Пример

0x00401020: 8B 0D 34 D4 40 00 mov ecx,dword ptr [0x0040D434]; ImageBase == 0x00400000

Лекция 6 32 / 38

Page 33: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Формат заголовка секций (IMAGE_SECTION_HEADER)Таблица экспортаТаблица импортаТаблица перемещений

Таблица перемещений

IMAGE_BASE_RELOCATION

typedef struct _IMAGE_BASE_RELOCATION{DWORD VirtualAddress; // RVA страницыDWORD SizeOfBlock;

// WORD TypeOffset[1];}IMAGE_BASE_RELOCATION;

0111215

тип смещение

Рис. 7: формат записи таблицы «тип/смещение» (16 бит)

Лекция 6 33 / 38

Page 34: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Формат заголовка секций (IMAGE_SECTION_HEADER)Таблица экспортаТаблица импортаТаблица перемещений

Типы перемещения

IMAGE_REL_BASED_ABSOLUTEIMAGE_REL_BASED_HIGHIMAGE_REL_BASED_LOWIMAGE_REL_BASED_HIGHLOWIMAGE_REL_BASED_HIGHADJIMAGE_REL_BASED_DIR64

. . .

Таблица 16: основные типы перемещения

Лекция 6 34 / 38

Page 35: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Формат заголовка секций (IMAGE_SECTION_HEADER)Таблица экспортаТаблица импортаТаблица перемещений

Пример таблицы перемещений (notepad.exe)

Пример (таблица перемещений)

Table: 1VirtualAddress: 0x0000C000 - .rdataSizeOfBlock: 0x00000014

0x0000CA88 DIR64 - 0x00000001‘000033000x0000CAA0 DIR64 - 0x00000001‘00003D940x0000CAA8 DIR64 - 0x00000001‘000033500x0000CE58 DIR64 - 0x00000001‘000104A00x0000CE60 DIR64 - 0x00000001‘00010540

...

Лекция 6 35 / 38

Page 36: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Алгоритм CreateProcess()Открытие файла образаИсполнительная система

Порядок создания процесса

Алгоритм CreateProcess...()

1 Проверка и разбор параметров.2 Открытие исполняемого файла.3 Создание объекта процесса

исполнительной системы.4 Создание элементов основного

потока.5 Инициализация в подсистеме

Windows.6 Запуск на исполнение основного

потока7 Завершение инициализации

в контексте потока.

вызывающийпроцесс

подсистемаWindows

созданныйпроцесс

1

2

3

4

5

6 7

Рис. 8: порядок исполнения

Лекция 6 36 / 38

Page 37: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Алгоритм CreateProcess()Открытие файла образаИсполнительная система

Открытие файла образа

Тип файла Исполняемый образ ЭтапПриложение Windows Образ файла 3Есть ключ с именем отладчика Образ, указанный в ключе 1Приложение Win16 Ntvdm.exe (общий или новый) 1Приложение MS-DOS Ntvdm.exe (общий) 1Приложение POSIX Posix.exe 1Сценарий (.bat, .cmd) Cmd.exe 1Приложение Win64 на не под-держивающей архитектуре

— ошибка

Неправильный формат, невоз-можно открыть

— ошибка

Таблица 17: варианты алгоритма при открытии исполняемого образа в различныхситуациях

Лекция 6 37 / 38

Page 38: Лекция 6. Запуск процессаstaff.mmcs.sfedu.ru/~dubrov/files/sl_13_win_06_process.pdf · Начало Формат заголовков исполняемых файлов

НачалоФормат заголовков исполняемых файлов

Формат секцийСоздание процесса

Алгоритм CreateProcess()Открытие файла образаИсполнительная система

Инициализация исполнительной системы

Порядок работы

1 Заполнение структуры EPROCESS (таблица дескрипторов, атрибутыбезопасности, код возврата, идентификатор, идентификатор родителя,имя образа, базовый адрес, . . . )

2 Создание начального адресного пространства.3 Заполнение структуры KPROCESS (состояние, время ядра/пользователя,

аффинность, список структур потоков, . . . )4 Заполнение структуры PEB (база данных загрузчика, данные TLS,

информация о куче, таблица дескрипторов GDI, . . . )5 Завершение установки адресного пространства (отображение секций

в адресное пространство, отображение Ntdll.dll, создание сеанса принеобходимости, . . . )

Лекция 6 38 / 38