今天我又有一个奇怪的问题(至少对我来说是这样)。我正在尝试更多的指针和一个想法,如下所示:
代码(只是其中的一部分)
int * firefoxmemory = (char*) 0x11111111 //this is just an example of address.
*firefoxmemory = 200;
问题:
在上面的代码中,我尝试访问firefox使用的内存(我使用内存编辑器查看地址),然后更改其对应的值。但是当我尝试这样做时,我的程序崩溃了。
为什么我的程序会出现这种情况? Firefox 是否使用了一些特殊代码来防止第 3 方程序篡改其内存?还是由 Windows 和 Intel 硬件 DEP 完成?
如果 DEP 阻止了上述操作,为什么某些内存编辑软件仍然可以工作,例如可以更改内存值的 Cheat Engine ?
最佳答案
它崩溃是因为 0x11111111
没有指向应用内存空间中的有效地址。
对于 Cheat Engine ,有几种方法可以访问另一个程序的内存:
1) 在目标进程的内存空间内运行代码。有多种方法可以使用 SetWindowsHookEx()
或 CreateRemoteThread()
将代码注入(inject)另一个进程。
2) 使用 ReadProcessMemory()
和 WriteProcessMemory()
关于c++ - 访问其他程序使用的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8191801/