我正在尝试使用PEB
C/ASM 中的结构,但在我想了解一些基础知识之前。我在某处读到大多数进程都有自己的PEB
的地址0x07FFDA00
。
现在这个地址是相对于进程基地址的,即(0x00400000 + 0x07FFDA00 == PEB base addr)
?
因为所有进程当然不能有他们的PEB
到这个地址。
因为所有进程当然不能将它们的PEB发送到这个地址。
如果0x07FFDA00
是一个虚拟地址,0x00400000
那么所有进程都可以PEB
在这个地址上拥有它们。
正如您在这个线程中看到的,0x07FFDA00
不是 a 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;