如何从外部进程获取进程环境块(PEB)?

时间:2011-03-28 04:23:59

标签: delphi winapi api

所以...我需要从“notepad.exe”进程中获取peb,有人知道如何制作它吗?

我正在尝试使用“GetModuleHandle”API,但是...不会返回指针(每次都返回零)因为我必须是该模块的调用者进程。

出于这个原因,我想知道如何使用“EnumProcessModules”或“CreateToolhelp32Snapshot”来获取它。

如果有人知道请告诉我如何,提前谢谢!

1 个答案:

答案 0 :(得分:9)

Matt Pietrek在1994 Under the Hood column中描述了如何做到这一点。它是关于如何获取另一个进程的环境变量,其中第一步是获取指向PEB的指针。他说,要做到这一点,请致电NtQueryInformationProcess。它填充的PROCESS_BASIC_INFORMATION结构包含PEB结构的基址。 (您需要使用ReadProcessMemory来读取它,因为地址将位于外部进程的地址空间的上下文中,而不是您的地址空间。)

要致电NtQueryInformationProcess,您需要一个流程处理程序。如果您自己启动了该过程(通过调用CreateProcess),那么您已经有了一个句柄。否则,您需要找到进程ID,然后调用OpenProcess。要获取进程ID,请使用EnumProcessesProcess32First / Process32Next搜索所需的进程。 (我更喜欢后者,因为它以较少的工作提供更多信息。)