VMMap中的地址可读吗?

时间:2019-01-03 03:04:32

标签: c winapi sysinternals vmmap

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

这是一个例子:

enter image description here

我试图用下面的一些快速代码查看是否可以读取该地址。对VirtualQueryEx的调用不会失败,因为响应不是0。但是,我的问题是State返回了一个指示该地址不存在的值,而Protect返回了PAGE_NOACCESS

enter image description here

代码:

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中的地址可读吗,或者我做错了什么?

0 个答案:

没有答案