Как получить блок среды процесса (PEB) из внешнего процесса? - PullRequest
4 голосов
/ 28 марта 2011

Итак ... Мне нужно получить peb из процесса "notepad.exe", кто-то знает, как это сделать?

Я пытался использовать API "GetModuleHandle", но ... не возвращает мне указатель (каждый раз возвращает мне ноль), потому что я должен быть вызывающим процессом этого модуля.

По этой причине я хочу знать, как получить его с помощью «EnumProcessModules» или «CreateToolhelp32Snapshot».

Если кто-то знает, пожалуйста, скажите мне, как, спасибо заранее!

1 Ответ

9 голосов
/ 28 марта 2011

Мэтт Пьетрек описал, как это сделать в 1994 Под капотом колонке . Речь шла о том, как получить переменные окружения другого процесса, где первым шагом является получение указателя на PEB. Для этого, по его словам, звоните NtQueryInformationProcess. Заполняемая им структура PROCESS_BASIC_INFORMATION содержит базовый адрес структуры PEB. (Вам нужно будет использовать ReadProcessMemory, чтобы прочитать его, поскольку адрес будет в контексте адресного пространства внешнего процесса, а не вашего.)

Чтобы позвонить NtQueryInformationProcess, вам понадобится дескриптор процесса. Если вы начали процесс самостоятельно (позвонив по номеру CreateProcess), то у вас уже есть дескриптор. В противном случае вам нужно найти идентификатор процесса и затем позвонить OpenProcess. Чтобы получить идентификатор процесса, найдите нужный процесс с помощью EnumProcesses или Process32First / Process32Next. (Я предпочитаю последний, потому что он предоставляет больше информации с меньшим количеством работы.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...