Я пытаюсь получить свой собственный PEB и получить свой собственный адрес модуля. я написал простой код, как это:PEB (Process Environment Block) недействительный адрес DllBase
PLIST_ENTRY myModule = (PLIST_ENTRY)pebLdr->InMemoryOrderModuleList.Flink;
PLDR_DATA_TABLE_ENTRY myImageBase = (PLDR_DATA_TABLE_ENTRY)myModule;
PIMAGE_DOS_HEADER dosHeader = (PIMAGE_DOS_HEADER)myImageBase->DllBase;
Но я не вижу правильный заголовок PE в dosHeader
. Это то, что я вижу в отладчике MSVC в переменной dosHeader
: e_magic=???,e_cblp=???
. Почему я не могу получить свой собственный заголовок? Я проверил все, я сделал все, как задокументировано, и я могу видеть свое имя exe в pData->FullDllName
, все кажется правильным, и DllBase
имеет смысл его не нуль или что-то вроде ffffff
. Есть ли какая-то конкретная вещь, которую нужно делать пчелам, возможно, расчет адреса?
Скорее всего, 'myImageBase' не инициализирован правильно. Проверьте 'myImageBase-> FullDllName', содержит ли оно допустимое имя модуля? Также возможно, что ваш SDK слишком старый, поэтому «PLDR_DATA_TABLE_ENTRY» были изменены, и вы читаете с использованием неправильного смещения. – Ari0nhh
@ Ari0nhh я проверил, и я вижу, что 'myImageBase-> FullDllName' имеет мое действительное имя exe. – Vlad
Почему вы используете этот низкоуровневый трюк, вместо того, чтобы использовать вызов более высокого уровня, например ['NtQueryInformationProcess()'] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms684280 .aspx)? Установка 'ProcessInformationClass' в' ProcessBasicInformation' * * извлекает указатель на структуру PEB ... * " –