Windows保护模式学习笔记(九)—— 2-9-9-12分页
Windows保護模式學習筆記(九)—— 2-9-9-12分頁
- 要點回顧
- 10-10-12分頁
- 原理
- 環境配置
- 2-9-9-12分頁
- 原理
- PDPTE
- PDE
- PTE
- XD/NX標志位
- 環境配置
- 實驗:通過線性地址找到物理地址
- 第一步:新建一個記事本,寫入"Hello World"
- 第二步:使用Cheat Engine附加進程
- 第三步:找到"Hello World"的線性地址
- 第五步:將線性地址拆分為2-9-9-12四組比特組
- 第六步:獲得進程的Cr3
- 第六步:通過Cr3找到字符串的物理地址
- 第一層:PDPT表
- 第二層:PDT表
- 第三層:PTT表
- 第四層:物理頁
要點回顧
在之前的筆記中我們已經講解了10-10-12分頁方式,在這種分頁方式下物理地址最多可達4GB。但隨著硬件的發展,4GB的物理地址范圍已經無法滿足要求
Intel在1996年就已經意識到這個問題了,所以設計了新的分頁方式,也就是我們本節課要講的2-9-9-12分頁,又稱為PAE(物理地址擴展)分頁
10-10-12分頁
原理
環境配置
若想將操作系統設置為10-10-12分頁,只要將C:\boot.ini文件中的 noexecute 改為 execute,重啟即可。具體步驟在學習10-10-12分頁時已經介紹,這里不再詳述。
2-9-9-12分頁
描述:2-9-9-12分頁(PAE,物理地址擴展)
原理
由于PTE增大了,而PTT表的大小沒變,依然是4KB,所以每張PTT表能放的PTE個數由原來的1024個減少到512個,512等于2的9次方,因此PTI=9
與10-10-12不同,CR3不直接指向PDT表,而是指向一張新的表,叫做PDPT表(頁目錄指針表)
PDPT表中的每一個成員叫做PDPTE(Page-Directory-Point-Table Entry,頁目錄指針表項),每項占8個字節
PDPT表只有4個成員,因為2位比特位只能滿足四種情況:00 01 10 11
PDPTE
結構圖:
P位:第0位,有效位
Avail:這部分供操作系統軟件隨意使用,CPU不使用
Base Addr:指向PDT表地址,由兩部分組成
第一部分:高四字節32~35位
第二部分:低4字節12~31位
這兩部分加起來共24位,后12位補0
灰色部分:保留位
注意:PWT位與PCD位在本篇不作描述
PDE
結構圖:
PAT位:頁屬性表
只有當PS=1時,PAT位才是有意義的(頁屬性表只針對頁)
具體含義這里不作介紹,感興趣的同學可以查閱資料
注意:
PTE
結構圖:
注意:
XD/NX標志位
描述:
- Intel中稱為XD,AMD中稱為NX,即No Excetion
- 段的屬性有可讀、可寫和可執行
- 頁的屬性有可讀、可寫
- 當RET執行返回的時候,如果把堆棧里面的數據指向一段提前準備好的數據(把數據當作代碼來執行,漏洞都是依賴這點,比如SQL注入也是),那么就會產生任意代碼執行的后果
- 所以,Intel就在這方面做了硬件保護,設置了一個不可執行位 – XD/NX位。
- 當XD=1時,軟件產生了溢出也沒有關系,即使EIP蹦到了危險的“數據區”,也是不可以執行的
- 在PAE分頁模式下,PDE與PTE的最高位為XD/NX位.
環境配置
若想將操作系統設置為2-9-9-12分頁,只要將C:\boot.ini文件中的 execute 改為 noexecute,重啟即可。具體步驟在學習10-10-12分頁時已經介紹,這里不再詳述。
實驗:通過線性地址找到物理地址
第一步:新建一個記事本,寫入"Hello World"
第二步:使用Cheat Engine附加進程
第三步:找到"Hello World"的線性地址
注意:這里搜索到三個結果,需要判斷哪個是緩存,哪個才是真正的線性地址
將Hello World的最后一個字符’d’改為’m’,保存
線性地址最終確定為:0104FE58
第五步:將線性地址拆分為2-9-9-12四組比特組
0 1 0 4 F E58 = 0000 0001 0000 0100 1111 E58 = 00 // 0x0 000001000 // 0x8 001001111 // 0x4F E58 // 12個比特位剛好三個字節第六步:獲得進程的Cr3
在WinDbg中輸入命令:!process 0 0
DirBase的值就是進程的Cr3
第六步:通過Cr3找到字符串的物理地址
第一層:PDPT表
線性地址前兩位比特位為0,所以找下標為0的PDPTE
第二層:PDT表
乘8是因為每一個PDE占8個字節
第三層:PTT表
乘8是因為每一個PTE占8個字節
第四層:物理頁
尋找物理頁時就不用再乘8了
使用db命令以字符形式查看數據
實驗成功!
總結
以上是生活随笔為你收集整理的Windows保护模式学习笔记(九)—— 2-9-9-12分页的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows保护模式学习笔记(八)——
- 下一篇: Windows保护模式学习笔记(十)——