car*_*995 8 c++ memory memory-management
今天我又有一个奇怪的问题(至少对我而言).我正在尝试更多的指针和想法在我的脑海中引起如下:
int * firefoxmemory = (char*) 0x11111111 //this is just an example of address.
*firefoxmemory = 200;
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我尝试访问firefox使用的内存(我使用内存编辑器查看地址),然后更改其对应的值.但是当我尝试这样做时,我的程序崩溃了.
为什么这会发生在我的程序中?是否有一些特殊的代码用于防止第三方程序篡改其内存?或者它是由Windows和英特尔硬件DEP完成的?
如果DEP阻止了上述操作,为什么某些内存编辑软件仍然有用,比如可以改变内存中值的作弊引擎?
Rem*_*eau 13
它崩溃了,因为0x11111111它没有指向应用程序内存空间中的有效地址.
至于作弊引擎,有几种方法可以访问另一个程序的内存:
1)在目标进程的内存空间内运行代码.有多种方法可以使用SetWindowsHookEx()或将代码注入另一个进程CreateRemoteThread().
2)使用ReadProcessMemory()和WriteProcessMemory()
现代操作系统使用虚拟寻址 - 所以每个程序都有它认为是相同的地址空间。操作系统将其映射到实际内存地址。
因此,例如 Firefox 有一个位于 0x100 的字符串,您的程序也有一个位于 0x100 的字符串——这两个都是虚拟内存地址——操作系统/CPU 将这些地址映射到真实的物理 RAM——并将它们彼此分开——完全避免您描述的黑客技术。
| 归档时间: |
|
| 查看次数: |
12387 次 |
| 最近记录: |