Как правило, люди говорят, что все, что вам нужно сделать, чтобы получить адрес заголовка PE, это sth. как это:Получение виртуального адреса PE-заголовка в памяти
IMAGE_DOS_HEADER* IDH = (IMAGE_DOS_HEADER*)GetModuleHandle(NULL);
IMAGE_NT_HEADERS * INT = (IMAGE_NT_HEADERS *)((int *)IDH + (int)IDH.e_lfanew);
Однако через несколько часов думать, почему это не работает для меня, я понял, что дополнительно нужно разделить IDH.e_lfanew на 4. Таким образом, я получаю правильный указатель на IMAGE_NT_HEADER STRUCT только таким образом:
IMAGE_NT_HEADERS * INT = (IMAGE_NT_HEADERS *)((int *)IDH + (int)(IDH.e_lfanew/4));
Может ли кто-нибудь объяснить мне, почему мне нужно его разделить? Моя ОС - 64-битная Windows 8. Может быть, моя версия окон является причиной? Во всяком случае, я был бы очень благодарен за любое руководство!
Что такое PE-заголовок? –
То же самое, что и [Загрузка заголовков PE] (http://stackoverflow.com/questions/8782771/loading-pe-headers) –
Я верю, что если вы измените это (int *) на (int), вам не нужно разделить на 4 ... Вероятно, просто проблема с указателем. –