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個地址
一樣找的沒錯