为了在虚拟运行之后,客户机被宿主机接管,驱动程序代码还能被访问,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
Blue Pill源代码分析(2)
最新推荐文章于 2024-04-22 07:10:06 发布