为了在虚拟运行之后,客户机被宿主机接管,驱动程序代码还能被访问,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 &
Blue Pill源代码分析(2)
最新推荐文章于 2022-11-05 13:54:27 发布
本文深入探讨了Blue Pill驱动如何利用Windows的虚拟地址映射机制,详细解释了PML4、PDP、PD和PT常量的计算,并介绍了BP如何通过ExAllocatePoolWithTag和MmAllocateContiguousMemorySpecifyCache分配内存页面。此外,文章还讨论了内存页面的不同类型和标志,以及MmInitManager函数在创建PML4映射时的关键步骤。
摘要由CSDN通过智能技术生成