分页机制

一:启动一个计算器程序calc.exe,输入一个字符串123456789


二:启动WinDBG,并附加到计算器程序上开始调试(选择File>Attach to a process…..


三:在WinDBG的命令区输入xcalc!g*命令列出计算器程序中以g开头的所有符号(先要设置好XP系统的符号路径)


四:在WinDBG的命令区输入ddcalc!gpszNum l1命令,查看该符号地址的内容


五:继续查看地址000ac3f0


六:看来000ac3f0指向的很想我们前面输入的数字,使用显示字符串命令再进一步验证


七:先将这个虚拟地址转换成二进制格式,一边了解它的各个位域的值,这可以使.formats命令


根据上图的虚拟地址:页目录索引为0(高10位)  &  页表索引为ac (中间10位)  & 物理页内偏移为3F0

 

八:再启动一个WinDBG的实例,并开始本地内核调试以便观察计算器进程的页目录基地址。(以下所有操作都在这个WinDBG实例中进行的)


九:先通过!process 0 0命令列出所有进程,并在其中找到关于calc.exe的内容


十:上面的DirBase项描述的就是calc进程的页目录基地址的物理地址(CR3寄存器的内容)。也就是说该进程的页目录的及地址是02cc01c0

 

十一:使用!dd02cc01c0命令(显示物理内存,注意有!号)显示页目录表的内容 (02cc01c0指向了一片内存空间,这片内存空间是就有1024个PDE的页目录)



十二:页目录的每一项都是4个字节,因为我们要转换的地址的页目录索引为0,也就是页目录中的第一个表项,就是 02cc01c0指向的4字节的内存单元内容,其内容为8b1801,每个页目录表项的高20位是页表的起始地址的高20位,即我们需要的页表基地址就是8b1,低12位801是这个页表的属性 (结合一个操作系统的实现,看页表的属性)

 

十三:继续使用!dd 命令观察页表,因为页表索引是ac(最上方的虚拟地址ac3f0),每个页表项占4个字节,所以物理页面的基地址应该是8b1000 + ac*4所指向的内存单元中的4个字节的内容,就是PTE的内容(即内容的高20位)

(8b1000指向了一片内存空间,这片内存空间是就有1024个PTE的页表)




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值