【发布时间】:2012-01-01 18:29:53
【问题描述】:
今天我又有一个奇怪的问题(至少对我来说是这样)。我正在尝试更多的指针和一个想法,如下所示:
代码(只是其中的一部分)
int * firefoxmemory = (char*) 0x11111111 //this is just an example of address.
*firefoxmemory = 200;
问题:
在上面的代码中,我尝试访问firefox使用的内存(我使用内存编辑器查看地址),然后更改其对应的值。但是当我尝试这样做时,我的程序崩溃了。
为什么我的程序会出现这种情况? Firefox 是否使用了一些特殊代码来防止第 3 方程序篡改其内存?还是由 Windows 和 Intel 硬件 DEP 完成?
如果 DEP 阻止了上述操作,为什么某些内存编辑软件仍然可以工作,例如可以更改内存中值的作弊引擎?
【问题讨论】:
-
你不能像那样访问另一个进程的内存(好吧,除非你正在编程 AmigaOS)。
-
操作系统会阻止程序访问彼此的内存。这行不通。如果要在程序之间访问内存,则需要共享内存之类的东西。
-
你可以使用windows函数来检查不同程序的内存,你不能只是取消引用它
-
为什么作弊引擎可以访问内存并改变值??
-
只有 amigaOS 允许这个操作??我可以在 linux 下做吗??
标签: c++ memory memory-management