为何不同程序指向相同内存地址的指针无法修改对方的变量值
跨进程无法直接通过地址修改另一个程序变量的原因
核心原因是现代操作系统为每个进程提供了独立的虚拟地址空间,你在程序里看到的地址都是虚拟地址,和实际物理内存地址没有直接的固定对应关系:
- 每个进程的虚拟地址由操作系统通过页表单独映射到物理内存,相同数值的虚拟地址在不同进程中,映射的物理内存位置完全不同、互相隔离。p1打印出的
0x61ff08仅在p1自己的地址空间内有效,放到p2中没有任何意义。 - p2访问
0x61ff08时,实际访问的是p2自身地址空间的对应位置,这个位置要么还未被分配(会直接触发段错误崩溃),要么存储的是p2自身的无关数据,所以你读到的是垃圾值,自然也不可能修改p1中变量x的取值。
如果需要实现跨进程读写内存的需求,需要使用操作系统提供的专属接口:
- Windows平台可以调用
ReadProcessMemory、WriteProcessMemory等系统API,需要先获得目标进程的操作权限 - Linux平台可以通过
/proc/[目标进程ID]/mem虚拟文件、共享内存、进程注入等方式实现
内容的提问来源于stack exchange,提问作者Aswinpr
相关产品推荐
相关产品推荐

