Blue Pill源代码分析(2)

本文深入探讨了Blue Pill驱动如何利用Windows的虚拟地址映射机制,详细解释了PML4、PDP、PD和PT常量的计算,并介绍了BP如何通过ExAllocatePoolWithTag和MmAllocateContiguousMemorySpecifyCache分配内存页面。此外,文章还讨论了内存页面的不同类型和标志,以及MmInitManager函数在创建PML4映射时的关键步骤。
摘要由CSDN通过智能技术生成

为了在虚拟运行之后,客户机被宿主机接管,驱动程序代码还能被访问,BP使用了和windows一样的虚拟地址映射方式,以下四个常量:
#define PML4_BASE 0xFFFFF6FB7DBED000
#define PDP_BASE 0xFFFFF6FB7DA00000
#define PD_BASE  0xFFFFF6FB40000000
#define PT_BASE  0xFFFFF68000000000
和windows内核的下面四个常量对应(WRK中base/ntos/inc/amd64.h(2528)):
#define PXE_BASE          0xFFFFF6FB7DBED000UI64
#define PPE_BASE          0xFFFFF6FB7DA00000UI64
#define PDE_BASE          0xFFFFF6FB40000000UI64
#define PTE_BASE          0xFFFFF68000000000UI64
      7B40000000
这四个常量的计算方法如下:
首先选定PTE_BASE,windows选择把页表映射到虚拟地址0xFFFFF68000000000UI64的位置,则后面的PDE_BASE、PPE_BASE和PXE_BASE依次算出
PDE_BASE = ((PTE_BASE & 0x0000FFFFFFFFF000) >> 12) * 8 + PTE_BASE = 0xF68000000 * 8 + PTE_BASE = 0x7B40000000 + PTE_BASE = 0xFFFFF6FB40000000
PPE_BASE = ((PDE_BASE & 0x0000FFFFFFFFF000) >> 12) * 8 + PTE_BASE = 0xF6FB40000 * 8 &

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值