1

我正在使用 VMMap 查看进程的地址空间。左下角是地址。我试图复制地址并从进程中读取它。

这是一个例子:

在此处输入图像描述

我试图看看我是否可以用下面的一些快速代码来读取这个地址。调用VirtualQueryEx不会失败,因为响应不是0。但是,我的问题是State返回一个值,表明地址不存在并Protect返回PAGE_NOACCESS

在此处输入图像描述

代码:

int pid = 10964;
DWORD_PTR addr = 0x2C1811E0000;
MEMORY_BASIC_INFORMATION data;

HANDLE pHandler = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pid);
if (pHandler == NULL) {
    printf("Could not find process with id: %i", pid);
    return -1;
}

int mResult = VirtualQueryEx(pHandler, addr, &data, sizeof(MEMORY_BASIC_INFORMATION));
if (!mResult) {
    printf("Could not query virtual memory. Error: %i", GetLastError());
    return -1;
}

printf("Base address: %#010x\n", data.BaseAddress);
printf("Address state: %#010x\n", data.State);
printf("Address protection: %#010x\n", data.Protect);

VMMap 中的地址是可读的还是我做错了什么?

4

0 回答 0