C语言 PEB地址(0x07FFDA00)是从加载进程的基地址的RVA



我试图在C/ASM中使用PEB结构体,但在我想了解一些基础知识之前。我在某个地方读到,大多数进程的PEB位于地址0x07FFDA00

现在这个地址相对于进程基地址,即(0x00400000 + 0x07FFDA00 == PEB base addr) ?

因为所有的进程都不能把它们的PEB放到这个地址。

因为不可能所有进程的PEB都指向这个地址

如果0x07FFDA000x00400000都是虚拟地址,那么所有进程的PEB都可以在这个地址。

正如你在这个线程中看到的,0x07FFDA00不是RVA,它只是一个相对于进程的物理地址的VA,所以0x00400000 + 0x07FFDA00没有任何意义。

您可以使用NtQueryInformationProcess检查此设置,例如:

DWORD pid = GetCurrentProcessId();
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid);
PROCESS_BASIC_INFORMATION pbi;
NTSTATUS status = NtQueryInformationProcess(hProcess,
                                            ProcessBasicInformation,
                                            &pbi,
                                            sizeof(pbi),
                                            NULL);
PPEB peb_addr = pbi.PebBaseAddress;

最新更新