Доступны ли для чтения адреса из VMMap? - PullRequest
0 голосов
/ 03 января 2019

Я использую 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 читается или я что-то не так делаю?

...