c++设置内存地址为value

C++ set memory address to value

本文关键字:value 地址 内存 设置 c++      更新时间:2023-10-16

我目前正在制作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 ?

谢谢。

这在纯c++中是不可能的。你将不得不求助于操作系统方法。

以Windows为例,你可以使用OpenProcessWriteProcessMemory这样的api来修改另一个进程的内存。

因为这种方法相当慢,所以通常使用的替代方法是将程序加载到要修改的目标进程的地址空间中。在Windows上,这可以通过使您的程序成为DLL并将其放入目标(参见"DLL注入")来实现。

因为你评论了你的程序是否易受攻击:如果你的攻击者可以访问你的机器,是的。如果您的攻击者具有以写访问权限打开您的进程的特权,则可以。

进程在其地址空间中有自己的一组内存。此外,您正在尝试修改值(或变量)的进程已经终止,变量被垃圾收集。

linux下使用ptrace系统调用。在win32中,您可以使用ReadProcessMemory, WriteProcessMemory。但是要使用它们,你需要使用OpenProcess

打开第一个进程