读取进程内存

时间:2012-08-31 12:21:58

标签: c winapi

我正在尝试从进程中读取内存(calc.exe)。但是我打的是“无法读取内存”的消息。我的错误在哪里?

int main() {
    HWND handle = FindWindow(0, TEXT("Calculadora"));
    if (!handle) {
        msg("Could not find window");
        return 0;
    }

    DWORD id;
    GetWindowThreadProcessId(handle, &id);
    HANDLE proc = OpenProcess(PROCESS_VM_READ | PROCESS_VM_WRITE | PROCESS_VM_OPERATION, FALSE, id);
    if (!proc) {
        msg("Could not open process");
        return 0;
    }

    char buffer[128];
    if (ReadProcessMemory(proc, 0, &buffer, 128, NULL)) {
        msg("yes!!");
    }
    else {
        msg("Could not read memory");
    }

    CloseHandle(proc);
}

1 个答案:

答案 0 :(得分:7)

您正在尝试读取目标进程中的地址0。那永远都会失败。您需要从目标进程的虚拟地址空间中有意义的地址中读取。

请注意,要拨打ReadProcessMemory,您只需PROCESS_VM_READ。这不是问题所在,但我认为为了完整起见我会指出它。