Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2015_лекции / Лекция №3.1_2015

.pdf
Скачиваний:
76
Добавлен:
22.03.2016
Размер:
4 Мб
Скачать
☆

Структура формата 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