正常的读写方式为附加读写,通过进程挂靠到目标环境上下文进行读写;或者奇技淫巧读写。
如: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这里就不清了
0X000000000014FD14
0x14FD14 的二进制表示为:000 101001111 110100010100
为了得到48位,我们在前面补24个0,所以完整的48位虚拟地址是:
9-9-9-9-12
000000000 000000000 000000000 101001111 110100010100
plm4:0
[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!
最后于 2025-7-21 19:06
被只会逆一点点编辑
,原因: