• Windows内存管理分页


    0x01未开启PAE分页模式

    cr0 寄存器pg位为1就是开启分页模式之后说有的地址都是虚拟地址 经过换算得到物理地址再去访问

    ps=0时

    ps=1时

     

    计算方法,这里的pde 是页目录 pte 页表  cr3 是物理地址  下面是个实际例子

    这里取得 31-12位 地址后面都要补充000 因为页大小是4k ,他们的字段分别是

     英特尔手册上面的

    0x02开启PAE分页32位模式

     可以看到在开启pae 模式 物理地址扩展模式   32根地址线变成52根 这是 64位cpu 运行时 扩展方法

    32位扩展 应该是 36为地址线 这里演示是64位 cpu 运行32的程序 地址  

    64位cpu 默认是48位地址线 开启扩展是52位计算方法一样

     开启pae标志位  在cr4寄存器的第6个位置, 比没开启时多加了一个 pdpte 表 用来多寻址多的4根线地址

    pde ps位=0 就是4kb的页, ps=1 就是2mb的页

    每个标志位  多加了xd标志页的执行权限

     

    0x03开启PAE分页64位模式

     和上面一样 多加了 pml4e 用来寻址更多的线

     

     

     其实没什么东西 按照里面的地址会拆分就行 知道怎么算物理地址

    0x04 32位解析例子

     cr4 拆分  第6个是 1 开启了pae模式  这是一个32位系统按照上面32地址拆分

    6f9=  xxxx 1111 xxxx  

    8003f000 地址 拆分

    10    0 0000 0000     0 0011 1111     0000  0000  0000

    offset :0

    pdpt:2

    pde:0

    pte:3f

    这里找就是

    cr3地址*1000h+2*8=pdpt地址

     页目录地址就是 000717000  偏移0

     页目录属性  163= xxxx  0110  xxxx  ps=0 是一个4k的页  接着看 4k 页表解析就行了

     pa=00003f000+0 offset  就是真实物理地址

     和 gdtr 一样   0

     如果是2mb的页也是按照上面的方法找对应图表的地址解析

    0x05 64位解析例子

     看前面图知道 64位 默认是48跟线  后面都是保留位   真实地址 f88003faa9a8   

    找gdtr 物理地址 64位系统 cr3=3ea64

    f80005115000

    1  1111 0000      0 0000 0000      0 0010 1000         1 0001 0101          0000 0000 0000

    offset :000

    pml4: 115

    pdpt:1f0

    pde:28

    pte:115

     得到pml4表

     得到页目录指针表   063=xxxx 0110 xxxx  ps=0第8位不是1 不是1gb的页 

     得到pte 表  063  ps=0 不是2mb 的页   这是是4k的页 代表按 4k页 地址解析

     得到页表地址

     对比2个地址

    一样找的没错

    从此山高路远,纵马扬鞭。愿往后旅途,三冬暖,春不寒,天黑有灯,下雨有伞。此生尽兴,不负勇往。
  • 相关阅读:
    iOS-导航条
    iOS-存储
    iOS-模型传递
    iOS-日期相关
    iOS-UIViewController
    iOS-loadView方法
    iOS-UIWindow
    Spring 测试
    Spring条件注解@Conditional
    Spring多线程
  • 原文地址:https://www.cnblogs.com/feizianquan/p/15678354.html
Copyright © 2020-2023  润新知