保护模式101012分页机制

Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.htmlhtml

保护模式101012分页机制算法

 

   在保护模式中,咱们都知道,所谓的内存地址是虚拟地址,不是物理地址。工具

  可是,咱们是否想过,虚拟地址是随便产生的吗?固然不是,其实一些数字的组合。
spa

  可这些数字是什么意思呢?答案:序号。3d

  经过序号查找表,一个序号对应找一张(物理表地址+属性),这样经过连续的序号,咱们能够查找最终数据存放的物理地址。htm

  如今,咱们了解一下 10-10-12分页方式,即一个32位地址分别拆分红10-10-12位,每位组成一个新的序号。
blog

 

1、WindowsXp设置以101012分页启动方式索引

  在C:\boot.init(默认为隐藏文件,工具-文件夹选项-显示隐藏文件),将 "nonexecute-optin" 改成 "execute-optin"。进程

  修改完以后重启便可。内存

  

2、利用101012分页算法将线性地址转换为物理地址,并从物理页中读出内容

1. 打开记事本,输入"hello world"这个字符;以后使用CheatEngine工具附加,搜索该字符串,找到线性地址  

  

 

 

 

 

 

 

 

 2. 如今咱们获得该字符串的线性地址为 000B0C40,拆分红2进制,并按照10-10-12来分:

  00 0000 0000 | 00 1011 0000 | 1100 0010 0000 -> 0 | B0 | C40

  其至关于三级目录,所以,咱们须要获取一级目录的首地址。

  该一级目录地址每一个进程都存放于CR3寄存器中。

  

 

  咱们经过windbg的 "!process 0 0" 指令,查看每一个进程的CR3值(DirBase),以下图。

  DirBase(CR3): 1491c000

 

   

 

 

 

 3. 使用windbg依次查看物理内存

  <1>Windbg中 dd表示查看线性内存,而 !dd 表示查看物理内存。

  <2>内存地址后三个字节为属性,所以咱们查出地址后自动将后三个字节变为零便可。

  <3>10-10-12模式表示的是序号,咱们知道一个地址转换成四字节,前两级都是地址表,所以须要乘以*4。

    0 | B0 | C3B -> 0 | 2C0(B0*4) | C40

  1)查看一级地址值
  kd> !dd 1491c000
    #1491c000 14828067 14833067 14883067 00000000
    #1491c010 14807067 00000000 00000000 00000000

  2)查看二级地址值应该为二级地址加上额外偏移。0f2c2000+0x2c0
  kd> !dd 14828000+2c0
    #148282c0 14a05067 14998067 14a09067 149fa067
    #148282d0 1497b067 14a6c067 149ed067 1a57b067

  3)三级地址其实就是物理页地址,查字节,则不须要再进行扩大。

kd> !db 14a05000+c40    #14a05c40 68 00 65 00 6c 00 6c 00-6f 00 20 00 77 00 6f 00 h.e.l.l.o. .w.o.    #14a05c50 72 00 6c 00 64 00 21 00-21 00 21 00 00 00 00 00 r.l.d.!.!.!....

相关文章
相关标签/搜索