Необходимо получить адрес начала PE-заголовка в памяти. Использую данный код:
#define MakePtr(Type, Base, Offset) ((Type)(DWORD(Base) + (DWORD)(Offset)))
HMODULE hModule = GetModuleHandle(NULL);
PIMAGE_DOS_HEADER pDosHeader = (PIMAGE_DOS_HEADER)hModule;
PIMAGE_NT_HEADERS pNTHeaders = MakePtr(PIMAGE_NT_HEADERS,hModule,pDosHeader-
>e_lfanew);
PIMAGE_SECTION_HEADER pSections = IMAGE_FIRST_SECTION(pNTHeaders);
При выводе переменных получаю данные значения:
hModule = 01000000 //дескриптор файла
pDoaHeader = 01000000 //начало Dos заголовка
pDosHeader->e_lfanew = 224
pNTHeaders = 010000E0 // начало PE заголовка
pSections = 010001D8
Вопрос в том почему используется хэндл(дескриптор файла) для нахождения DOS и PE заголовков? Какое он имеет отношение к структуре самого файла? А то получается какому то непонятному числу присваивается тип PIMAGE_DOS_HEADER и выдается по сути за начало файла. Разве DOS заголовок не идет от начала файла т.е. от 00000000?
GetModuleHandle возвращает хэндл текущего исполнимого модуля (EXE).
В текущих версиях Windows, кажется, его значение равно указателю на базовый адрес модуля. Если формат вашего исполнимого файла начинается с IMAGE_DOS_HEADER'а, то в начале его образа у вас действительно найдётся PIMAGE_DOS_HEADER. (DOS-заголовок идёт с начала файла, да — но нулевой адрес файла не означает нулевой адрес модуля: по адресу 0 расположена страница, которая вызывает access violation при обращении!)
Подтверждение: The Old New Thing: Accessing the current module’s HINSTANCE from a static library. (Плюс вам понадобится также «известный» факт, что HINSTANCE приложения и GetModuleHandle(NULL) одинаковы.)
Тем не менее, я не нашёл упоминания этих фактов в официальной документации, поэтому я бы рассматривал их как ничем не подкреплённый хак. Стоит ли полагаться на него в вашем коде — решать вам.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости