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