我目前正在制作2个节目。其中一个将设置一个值,显示内存值和变量的值。接下来,它将等待用户按Enter键,它将再次显示该值。下一个程序将直接设置内存地址,因此修改其他代码中的值。
这是我的pointer1.cpp文件:
1 #include "iostream"
2 using namespace std;
3
4
5
6 int main()
7 {
8 int x = 100;
9 cout << "The memory of \"x\" is " << &x << ". X = " << x << endl;
10 cin.get();
11 cout << x << endl;
12 }
示例输出是:
The memory of "x" is 0x7fff578589ac. X = 100
100
那么我如何才能使我的第二个应用程序修改内存地址0x7fff578589ac
?
感谢。
答案 0 :(得分:3)
纯C ++无法实现这一点。您将不得不转向操作系统方法。
在Windows上,您可以使用OpenProcess
和WriteProcessMemory
等API来修改其他进程的内存。
因为这种方式相当慢,所以经常使用的替代方法是将程序加载到要修改的目标进程的地址空间中。在Windows上,这可以通过使程序成为DLL并将其置于目标中来实现(参见&#34; DLL Injection&#34;)。
因为您评论了您的程序是否容易受到攻击:如果攻击者可以访问您的计算机,是的。如果您的攻击者有权使用写访问权限打开您的进程,是的。
答案 1 :(得分:1)
进程在其地址空间中有自己的内存集。此外,您正在尝试修改已终止且变量被垃圾收集的进程中的值(或变量)。
答案 2 :(得分:0)
在linux中使用ptrace
系统调用。在win32中,您可以使用ReadProcessMemory
,WriteProcessMemory
。但要使用它们,您需要使用OpenProcess