2

我正在尝试使用PEBC/ASM 中的结构,但在我想了解一些基础知识之前。我在某处读到大多数进程都有自己的PEB的地址0x07FFDA00

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

因为所有进程当然不能有他们的PEB到这个地址。

4

1 回答 1

3

因为所有进程当然不能将它们的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;
于 2013-05-24T12:03:45.187 回答