2015_лекции / Лекция №3.1_2015
.pdf
Структура формата PE файла
Адреса
VA (Virtual Address) – виртуальные адреса, по которым программа может непосредственно читать и писать при загрузке в память
Offset – (физическое) смещение в файле, считая с его начала
RVA (Relative Virtual Address)= VA – Image Base
-смещения относительно виртуального начального адреса загрузки программы
Структуры PЕ формата
Структура заголовков
DOS заголовок
PE заголовок
Опциональный PE заголовок
Заголовок сегментов
Сегменты…
DOS (MZ) заголовок
WINNT.H
Структура IMAGE_DOS_HEADER
PE заголовок
PE заголовок (опциональный)
PE заголовок (опциональный)
typedef struct _IMAGE_OPTIONAL_HEADER {
// Standard fields. WORD Magic;
BYTE MajorLinkerVersion; BYTE MinorLinkerVersion; DWORD SizeOfCode;
DWORD SizeOfInitializedData; DWORD SizeOfUninitializedData; DWORD AddressOfEntryPoint; DWORD BaseOfCode;
DWORD BaseOfData;
// NT additional fields.
DWORD |
ImageBase; |
DWORD |
SectionAlignment; |
DWORD |
FileAlignment; |
WORD |
MajorOperatingSystemVersion; |
WORD |
MinorOperatingSystemVersion; |
WORD |
MajorImageVersion; |
WORD |
MinorImageVersion; |
WORD |
MajorSubsystemVersion; |
WORD |
MinorSubsystemVersion; |
DWORD |
Win32VersionValue; |
DWORD |
SizeOfImage; |
DWORD |
SizeOfHeaders; |
DWORD |
CheckSum; |
WORD |
Subsystem; |
WORD |
DllCharacteristics; |
DWORD |
SizeOfStackReserve; |
DWORD |
SizeOfStackCommit; |
DWORD |
SizeOfHeapReserve; |
DWORD |
SizeOfHeapCommit; |
DWORD |
LoaderFlags; |
DWORD |
NumberOfRvaAndSizes; |
IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;
Заголовок сегментов
Заголовок сегментов
typedef struct _IMAGE_SECTION_HEADER {
BYTE |
Name[IMAGE_SIZEOF_SHORT_NAME]; |
||
union { |
|
|
|
} Misc; DWORD |
PhysicalAddress; |
||
|
DWORD |
VirtualSize; |
|
DWORD |
VirtualAddress; |
||
DWORD |
SizeOfRawData; |
||
DWORD |
PointerToRawData; |
||
DWORD |
PointerToRelocations; |
||
DWORD |
PointerToLinenumbers; |
||
WORD |
NumberOfRelocations; |
||
WORD |
NumberOfLinenumbers; |
||
DWORD |
Characteristics; |
||
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
9 предопределенных секций
.text,
.bss,
.rdata,
.data,
.rsrc,
.edata,
.idata,
.pdata,
.debug
