34安于此生
2013-11-3 20:54
16073
由常規的兩級頁表轉換得不到實體地址的引發的思考?
可能你會發現乙個鬱悶的事情--按照通常的兩級頁表的轉化得不到正確實體地址,到底是哪個環節出了問題咧,其實一切都是pae惹的禍!
pae是神馬?
pae:全稱phyiscal address extension,實體地址擴充套件.
如何判斷pae是否開啟了pae.
一般兩個特點:
我的電腦=》屬性=》常規面板中有實體地址擴充套件的字樣。
cr4暫存器的第5位為1說明開啟了pae
說明當前系統啟用了pae.
新的轉化規則
轉換示意圖
規則:每個項的長度為8
va為2位:(30—31)頁目錄指標表的索引
9位:(21—29)頁目錄表索引
9位:(12—20)頁表索引
12位:(0—11)頁內偏移
例如:開啟pae的情況下將計算器程序的入口點0x01012475轉化為實體地址
頁目錄指標表的索引 頁目錄表索引 頁表索引 頁內偏移
0x01012475 《=》 00 000001000 000010010 010001110101
0x0 0x8 0x12 0x475
1.!process 0 0獲取計算器程序的資訊
2.定位頁目錄指標表並獲取頁目錄表物理頁位址
頁目錄指標表項的下標為0,所以就是0x06d13801,因此0x06d13000是頁目錄表物理頁面的首位址。
3.定位頁表項
0x4250867就是要找的頁目錄表項,因此頁表物理記憶體頁面首位址為0x4250000.
4.定位物理頁面
0x56b7000就是物理頁面首位址,0x457是偏移,所以0x056b7475就是我們要轉化的實體地址了。
正好就是虛擬位址對應的內容。
修改實體地址處首位元組對比虛擬位址處顯示內容
虛擬位址處內容也隨之改變了。
快訊:[快訊]十年後再版!《加密與解密(第4版)》京東開始預售!
上傳的附件:
啟用PAE機制下虛擬位址到實體地址的轉換
最近突然想起用softice手工計算一下虛擬位址到實體地址的轉換,理論的東西如段表 頁表等已經很熟悉了,但真正實際操作就碰到了大問題,特別是分頁機制,根本不是從cr3到頁目錄表到頁表再到實體地址這麼簡單,後來讀了一下 intel 64 and ia 32 architectures software...
虛擬位址與實體地址
乙個程式編譯連線後形成的位址空間是乙個虛擬位址空間,但是程式最終還是要執行在物理記憶體中。因此,應用程式所給出的任何虛位址最終必須被轉化為實體地址,所以,虛擬位址空間必須被對映到物理記憶體空間中,這個對映關係需要通過硬體體系結構所規定的資料結構來建立。這就是我們所說的段描述符表和頁表,linux主要...
邏輯位址 實體地址 虛擬位址
用於記憶體晶元級的單元定址,與處理器和cpu連線的位址匯流排相對應。雖然可以直接把實體地址理解成插在機器上那根記憶體本身,把記憶體看成乙個從0位元組一直到最大空量逐字節的編號的大陣列,然後把這個陣列叫做實體地址,但是事實上,這只是乙個硬體提供給軟體的抽像,記憶體的定址方式並不是這樣。所以,說它是 與...