我正在尝试使用PEBC/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;