13.跨进程读写内存

本文探讨了跨进程读写内存的核心概念,通过详细解释NtReadVirtualMemory和NtWriteVirtualMemory的流程,展示了如何在不同进程中交换数据。关键步骤包括切换CR3寄存器以指向目标进程的页目录表,从而实现数据在不同地址空间之间的传递。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

跨进程的本质是"进程挂靠”正常情况下, A进程的线程只能访问A进程的地址空间,如果A进程的线程想访问B进程的地址空间,就要修改当前的Cr3的值为B进程的页目录表基值(KPROCESS.DirectoryTableBase)。

即: mov cr3,B.DirectoryTableBase

跨进程操作

A进制中的线程代码:

mov cr3,B.DirectoryTableBase 		//切换Cr3的值为B进程
mov eax,dword ptr ds:[0x12345678] 	//将进程B Ox12345678的值存的eax中
mov dword ptr ds[0x00401234],eax 	//将数据存储到0x00401234中 
mov cr3,A.DirectoryTableBase		//切换回Cr3的值

//此时0x00401234中的数据还有吗?

//如何将数据传递给A进程的变量呢?

NtReadVirtualMemory流程解析:
在这里插入图片描述

  1. 切换Cr3
  2. 将数据读复制到高2G
  3. 切换Cr3
  4. 从高2G复制到目标位置

NtWriteVirtualMemory流程解析:
在这里插入图片描述

  1. 将数据从目标位置复制到2高2G地址
  2. 切换Cr3
  3. 从高2G复制到目标位置
  4. 切换Cr3

代码

3环

#include<stdio.h>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值