windbg遍歷進程頁表查看內存


2016-12-09

近期想查看下系統分配了的頁的頁表項的標志位,但是發現資料較少,所以還是記錄下,希望可以對某些朋友有所幫助!

系統:win7 32位虛擬機

平台:KVM虛擬化平台


win7 32位默認是開啟了PAE分頁模式的,PAE分頁模式本質上和普通的32位分頁並無區別,只是頁表結構和虛擬地址的划分有所不同,這點就不單獨講述,感興趣可參考另一篇博文:PAE 分頁模式詳解

首先寫了一件簡單的內核NT驅動,分配了一個頁的內存,然后寫入數據0xa1b2c3d4

加載驅動:

看到申請的內存的地址是0x85d55000,我們直接看下這塊內存:

確實是我們寫入的數據,然后開始查看頁表,首先獲取的是頁表基地址,我們通過當前進程查看:

可以看到頁基址是7ee47400,這正是當前CR3寄存器保存的頁基址,該地址指向一個頁目錄指針表(page-directory-pointer-table),需要注意的是該表一共有4個表項,每個表項八個字節,並且在PAE模式下,地址轉換不直接使用CR3寄存器,而是第一級的頁目錄指針分配了四個PDPTE寄存器,每個保存一個頁目錄指針,但是也目錄指針寄存器的值卻是來源於CR3指向的頁目錄指針表。所以我們仍然可以直接利用CR3來尋址。

我們先分解下目標虛擬地址:

按照 結構分成四部分:10    000101110      101010101     000000000000,對應16進制:0x2      0x2e       0x155        0x0

查看7ee47400內容,由於表項是8字節,所以使用dq(大小端模式問題)

 

根據虛擬地址,知道該地址對應表中第三項,即圖中標記的表項,取物理頁框號+偏移得:4595b000+0x2e*8=4595b170

查看該地址:

對應的表項內容為05e07863,同樣取物理頁框號+偏移得:05e07000+0x155*8=05e07aa8

查看地址內容:

得到表項內容為7fe95963 ,這個就是這個就是最終的PTE了,即指向一個4KB 頁面,物理頁框號為7fe95000,而由於我們是申請的就是一個頁,即頁內偏移為0,所以這里同樣也是我們虛擬地址對應的物理地址

查看內容:

至此,整個查表過程就完成了。


免責聲明!

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



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