虛擬地址到物理地址的轉換步驟


 

已知一個虛擬地址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.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM