我在进程中使用MEM_COMMIT枚举所有内存块,并在读取内存块后立即尝试写入相同的内容。因此大多数内存块都有一个Protect of 4,即PAGE_READWRITE。我注意到有很多内存块可以读取,但无法写入。典型输出如下:
Reading : 0x012C0000 - Size : 10000 - Protect : 4
The same contents written successfully!!!
Reading : 0x012D0000 - Size : 10000 - Protect : 4
The same contents written successfully!!!
Reading : 0x012E0000 - Size : 10000 - Protect : 4
The same contents written successfully!!!
Reading : 0x012F0000 - Size : 2000 - Protect : 4
The same contents written successfully!!!
但是,大多数其他内存块都可以读取但无法写入。
Reading : 0x31340000 - Size : 200000 - Protect : 4
Failed to write the same memory contents.
Reading : 0x31540000 - Size : 200000 - Protect : 4
Failed to write the same memory contents.
Reading : 0x31740000 - Size : 200000 - Protect : 4
Failed to write the same memory contents.
Reading : 0x31940000 - Size : 200000 - Protect : 4
Failed to write the same memory contents.
有什么理由吗?现在我无法改变我想要修改的内存。我正在使用Windows XP 32位并启用了我的进程权限,并使用此标志打开进程:
PROCESS_QUERY_INFORMATION | PROCESS_VM_READ | PROCESS_VM_WRITE | PROCESS_VM_OPERATION
目标进程是我用于测试的VirtualBox进程。
修改:我使用了GetLastError(),返回的错误是"尝试访问无效地址" 。