Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

C++ Получить список загруженных модулей в x64 peb?

не то, мне из 64 битного нужно
Ты просто прочитал тайтл, правда же? Тебе нужно разжевывать !страшную! информацию со стековерфлова на !английском языке!?
Пожалуйста, авторизуйтесь для просмотра ссылки.
1661099857278.png
 
Ты просто прочитал тайтл, правда же? Тебе нужно разжевывать !страшную! информацию со стековерфлова на !английском языке!?
Пожалуйста, авторизуйтесь для просмотра ссылки.
Посмотреть вложение 217741
ебать, мне нахуй не сдалось из 32 битного читать 64 битную память, мне нужно из 64 битов читать 64 бита
 
не могу понять, где находится в винапи InLoadOrderModuleList.
Оно не находится в WinAPI как таковом, это вендовые интерналсы мемные, у венды есть структура _PEB_LDR_DATA, в которой есть поле
InLoadOrderModuleList, которое принадлежит _LIST_ENTRY:
_PEB_LDR_DATA struct:
Expand Collapse Copy
typedef struct _PEB_LDR_DATA {
    ULONG Length;
    BOOLEAN Initialized;
    HANDLE SsHandle;
    LIST_ENTRY InLoadOrderModuleList;
    LIST_ENTRY InMemoryOrderModuleList;
    LIST_ENTRY InInitializationOrderModuleList;
    PVOID      EntryInProgress;
} PEB_LDR_DATA, * PPEB_LDR_DATA;

Получить InLoadOrderModuleList можно подобным образом.
Init InLoadOrderModuleList:
Expand Collapse Copy
// Ищем PEB
PEB = (PPEB64)__readgsqword(0x60);

/* Для x86 нужно обращаться по шлюзу FS с адресом 0x30, это можно делать как интриксом:
PEB = (PPEB32)__readfsdword(0x30);

Так и асм-вставкой (только для x86, ибо микромягкие их выпилили из x64):
PPEB32 PEB;

__asm {
      mov eax, fs:[0x30]
      mov PEB, eax
}
*/

// Инициализируем данные "загрузчика"
PPEB_LDR_DATA LdrData = PEB->Ldr;
LIST_ENTRY List = LdrData->InLoadOrderModuleList;

Для x86 под x64 можно выходить из контекста выполнения WOW64, используя технику Heavens Gate
 
Последнее редактирование:
Назад
Сверху Снизу