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