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

Эксперт
Статус
Оффлайн
Регистрация
29 Мар 2021
Сообщения
1,596
Реакции[?]
605
Поинты[?]
46K
не могу понять, где находится в винапи InLoadOrderModuleList.
 
Пользователь
Статус
Оффлайн
Регистрация
17 Июл 2021
Сообщения
462
Реакции[?]
118
Поинты[?]
10K
Эксперт
Статус
Оффлайн
Регистрация
29 Мар 2021
Сообщения
1,596
Реакции[?]
605
Поинты[?]
46K
Ты просто прочитал тайтл, правда же? Тебе нужно разжевывать !страшную! информацию со стековерфлова на !английском языке!?
Пожалуйста, авторизуйтесь для просмотра ссылки.
Посмотреть вложение 217741
ебать, мне нахуй не сдалось из 32 битного читать 64 битную память, мне нужно из 64 битов читать 64 бита
 
Obstruct Omicronium
Пользователь
Статус
Оффлайн
Регистрация
28 Авг 2022
Сообщения
67
Реакции[?]
78
Поинты[?]
66K
не могу понять, где находится в винапи InLoadOrderModuleList.
Оно не находится в WinAPI как таковом, это вендовые интерналсы мемные, у венды есть структура _PEB_LDR_DATA, в которой есть поле
InLoadOrderModuleList, которое принадлежит _LIST_ENTRY:
_PEB_LDR_DATA struct:
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:
// Ищем 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
 
Последнее редактирование:
Сверху Снизу