虛擬地址到實體地址的轉換
小編今天為大家分享的操作方法,歡迎大家前來閱讀。
已知一個虛擬地址0x01AF5518, 則轉換的過程如下:
注意: *這裡討論的以Windows下普通模式分頁的情況, 也就是2級頁表的情況*
1.首先把虛擬地址拆分成3個部分低12位, 中10位, 高10位, 換成2進位制如下:
-> 0000 0001 1010 1111 0101 0101 0001 1000
按照10, 10, 12的位數重新排列後
-> 頁目錄索引00 000 00110, 頁表項索引10 1111 0101, 偏移0101 0001 1000
換算成十六進位制後可以得到如下結果
頁目錄索引 = 6, 頁表項索引 = 0x2f5 , 偏移 = 0x518
2. 根據當前的CR3暫存器中的實體地址定位頁目錄表基址
Cr3中存放的是實體地址, 這個實體地址指向程序的頁目錄表基址, 由此可以得到
頁目錄表基址PDE = Cr3 = 0xAA0E5000
3. 計算頁表項的地址
頁表地址存放在頁目錄表PDE中的第6個專案中, 也就是
[0xAA0E5000 + 4 * 6] = [0xAA0E5018] = 0x3D955867, 其中0x00000867為該頁表屬性值, PTE = 0x3D955000
3. 計算頁面實體地址
我們要找的頁面在這個頁表中的第0x2f5項, 所以虛擬地址所在的頁的實體地址為
[0x3D955000 + 0x2f5 * 4] = [0x3D955BD4] =
假設[0x3D955BD4] = 0x7095e847, 頁面的實體地址 x0x7095e000, 0x00000847表示的是頁面屬性
4. 計算最終的實體地址
由虛擬地址分離的偏移可以計算出最終的實體地址為
0x7095E000 + 0x00000518 = 0x7095E518.
小編分享了的操作方法,希望大家喜歡。