10

mac2025-12-31  3

前置知识:

在 windows 中 保护模式 有两种模式: 段保护 和 页保护

段保护 主要体现在 段选择子上;但是数据段、代码段、栈段等采用的都是4GB平坦模式,段的特征并没有那样展现。所以具体的保护机制 采用的是页保护。

PAE和 非PAE:

页保护 有两种:

非 PAE

PAE

 

开启 PAE:

在 boot.ini 中 设置:为 noexcute -- 即不可执行 ;激活 DEP 的功能 -在这个时候 使用的是 PAE(因为早期的非PAE 并不支持数据执行保护);

选择 为 execute -optin 后 这里的 数据执行保护 是灰色的 根本就不能设置。这时候 就是 非 PAE 模式下。相反 就是 PAE 模式下。

 

图解 非 PAE:

图解 PAE:

注意: 内核地址中 专门有一块却与用来存放 pte表、pde 表的 非pae 是 4MB , pae 由于每项是8byte 所以变为 8MB;

这里 假设一个虚拟地址 0x403018 则:

 

手动模拟 解析 PAE地址:

获取测试进程的cr3

> !process 0 0 // 获取当前进程列表,找到测试进程的 dirbase = cr3

解析虚拟地址 0x403018

> .formats 0x403018 // 查看二进制

然后手动分解 pdpte pde pte offset :

---// 00 000000010 000000011 000000011000

---// 0 2 3 18

结合windbg 找对应的物理地址:

找 pdpte 中的项 pde 的地址

cr3 + 8*0

找 pde 中的项 pte 的地址

pde + 2*8

找 pte 中 页的地址

pte + 3*8

页的 地址 + offset 即 是 目标物理地址

p + 18

 

如图:

 

 

/i 进程调度的时候 切换 进程到指定进程:

g 运行起来 激活 调度;以至于到目标进程的时候停下来

查看 当前进程 的 cr3

使用 db 查看这时候进程空间 虚拟地址 数据

 

使用 windbg 解析 虚拟地址对应的物理地址:

!vtop 有两个参数

第一个对应的是 cr3

第二个参数 是 对应进程的虚拟地址。

 

使用 !pte 0xaddr 查看对应addr 中的页属性(前提:必须切换到当前进程,cr3也需要切换到,即 !process 0 0; .process /i xxxxx;g;)

通过下面这两个公式 解析出所在的 pde 、pte

修改pte 属性,关闭dep

最新回复(0)