c++ - 访问其他程序使用的内存

标签 c++ memory memory-management

今天我又有一个奇怪的问题(至少对我来说是这样)。我正在尝试更多的指针和一个想法,如下所示:

代码(只是其中的一部分)

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/

相关文章:

php - 如何从 php ://temp wrapper 中删除文件

c++ - 类析构函数和指针释放

c++ - 在x86/x86-64上智能指针的原子交换

c++ - 如何将 `duration_cast` 用于派生类?

java - 如何修复 "java.lang.OutOfMemoryError at sun.misc.Unsafe.allocateMemory(Native Method)"?

c - 我应该如何返回 C 库中二元运算函数的结果?

c++ - new[] 比 Win32 的 VirtualAlloc 快吗?

objective-c - 如何正确分配/释放这个指针? objective-c

c++ - 在 C++ 中解析这个的最好方法是什么?

c++ - 重载 C++ 类型转换(函数)