正常的读写方式为附加读写,通过进程挂靠到目标环境上下文进行读写;或者奇技淫巧读写。如:MmCopyMemory虚拟地址;mdl强读;切cr3读写;直接附加读写;傀儡进程读写
物理读写则是手动解析页表,直接读写物理内存。即从CR3寄存器->物理内存。因为是算法解析,不存在附加一说(不能通过查apc检测)。
在这种分页方式下物理地址最多可达4GB。但随着硬件的发展,4GB的物理地址范围已经无法满足要求
2-9-9-12分页是32位下分页的扩展 ,可以访问最高64GB物理内存
描述:随着计算机技术的发展,64位系统逐渐占据主流地位,那么也就表示CPU的最大寻址范围为64位。但实际上,CPU只使用了其中的48位用于寻址,并使用9-9-9-9-12分页模式。即便如此,在未来较长一段时间里,48位寻址范围也足够大部分人的日常使用了。 9-9-9-9-12 分页机制理论上支持超大物理地址空间,但实际最大可访问物理内存由 CPU 的 MAXPHYADDR 位数决定,典型值为 36 位(64GB)、40 位(1TB)或更高(如 52 位/4PB)
这四级页表分别称为PML4E、PDPTE、PDE、PTE
RW位 读写 物理页的属性=PDE属性& PTE属性 US=0 内核 US=1用户 PDE属性& PTE属性PWT – 页表缓冲写入机制,为 0 表示 write-back 模式,更新页表缓冲区时,只标记为已更新,不同步写内存,只有被新进入的数据取代时才更新到内存,为 1 表示 write-through 模式,更新页表缓冲区时,同步写内存,保证缓冲区与内存一致PCD – 是否拒绝被缓冲,为 0 表示可以被缓冲,为 1 表示不可以被缓冲A 位 – 是否被访问,CPU 会在访问到页面时将该位置 1,但不会清除,只有软件可以将 A 位复位D 位 – 是否被写入,CPU 会在写入页面时将该位置 1,但不会清除,只有软件可以将 D 位复位PS – PDE特有,页大小位,为 0 表示页大小为 4KB,且 PDE 指向页表,为 1 表示页大小为 4MB,且 PDE 指向 4MB 的整块内存PAT – 奔腾3以后的 CPU 引入的页属性表标识位,为 1 开启页属性表后,通过一系列专用寄存器(MBR)为每个页提供了详细的属性设置G 位 – 全局位,也称为脏位,如果该位与 CR4 寄存器的 PGE 位同时被置为 1,则该页或页目录项将不会在 TLB 中被逐出
CR3 是 x64 架构的关键控制寄存器,64 位宽,其结构按功能划分为以下字段3.分页机制入口4.进程地址空间隔离5.TLB 管理
测试代码运行CR3:14e4cd000 保留位清零
CR3 的低 12 位为保留位(未启用 PCID 时),必须置 0。&= ~0xf 显式清除低 4 位,避免硬件未定义行为但是本来就是0这里就不清了0X000000000014FD140x14FD14 的二进制表示为:000 101001111 110100010100为了得到48位,我们在前面补24个0,所以完整的48位虚拟地址是:9-9-9-9-12000000000 000000000 000000000 101001111 110100010100plm4:0
回复或点赞可查看完整内容
---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-287678.htm