Windows保护模式学习笔记(六)—— 10-10-12分页
Windows保護模式學習筆記(六)—— 10-10-12分頁
- 基本概念
- 4GB內存空間
- 有效地址-線性地址-物理地址
- 有效地址與線性地址
- 物理地址
- 控制寄存器:Cr3
- 10-10-12分頁
- 實驗:通過線性地址找到物理地址
- 第一步:將XP虛擬機設置為10-10-12分頁模式
- 第二步:新建一個記事本,寫入"Hello World"
- 第三步:使用Cheat Engine附加進程
- 第四步:找到"Hello World"的線性地址
- 第五步:將線性地址拆分為10-10-12三組比特組
- 第六步:獲得進程的Cr3
- 第七步:通過Cr3找到字符串的物理地址
- 第一層
- 第二層
- 第三層
基本概念
4GB內存空間
大家可能都聽說過,每個程序在運行時,操作系統都會為其分配一段4GB的內存空間。
但是我們的內存容量很可能最多只夠為一個進程分配4GB的內存空間,如何做到為每個進程都分配呢?
實際上,進程被分配到的“4GB內存空間”只是虛擬的的內存空間,并不是指真正意義上的物理內存,虛擬內存與物理內存之間有一層轉換關系。
有效地址-線性地址-物理地址
有效地址與線性地址
先看如下指令:
MOV eax,dword ptr ds:[0x12345678]
其中,0x12345678 是有效地址
ds.Base + 0x12345678 是線性地址
注意:當段寄存器的Base為0時,有效地址=線性地址,大多數時候都是如此;但也有特殊情況,比如fs段寄存器的Base不為0
物理地址
描述:
我們平時所用到的系統DLL(動態鏈接庫)存在于物理地址中,當程序想要調用某個DLL時,DLL便會映射一份線性地址給程序,這樣程序就能夠通過線性地址找到DLL的物理地址
控制寄存器:Cr3
描述:
每個進程都有一個Cr3(準確的說是都有一個Cr3的值,Cr3本身是個寄存器,一個核,只有一套寄存器)
Cr3指向一個物理頁,一共4096字節
有關Cr3結構部分將在下一篇詳細說明,這里只引入基本概念(實驗需要)
10-10-12分頁
實驗:通過線性地址找到物理地址
第一步:將XP虛擬機設置為10-10-12分頁模式
右鍵→我的電腦→屬性→高級
將noexecute改為execute,保存,重啟即可
第二步:新建一個記事本,寫入"Hello World"
第三步:使用Cheat Engine附加進程
第四步:找到"Hello World"的線性地址
搜索字符串的時候別忘了勾上Unicode
可以看到左邊出現了兩個結果,我們可以在記事本中將最后的字符’d’改成’m’來確認哪個才是真正的線性地址
線性地址最終確定為:06765140
第五步:將線性地址拆分為10-10-12三組比特組
0 6 7 6 5 140 = 0000 0110 0111 0110 0101 140 = 0000011001 // 0x19 1101100101 // 0x365 140 // 12個比特位剛好三個字節第六步:獲得進程的Cr3
在WinDbg中輸入命令:!process 0 0
DirBase的值就是Cr3
第七步:通過Cr3找到字符串的物理地址
注意:
第一層
第二層
第三層
使用db命令以字符形式查看
實驗成功!
總結
以上是生活随笔為你收集整理的Windows保护模式学习笔记(六)—— 10-10-12分页的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows保护模式学习笔记(五)——
- 下一篇: Windows保护模式学习笔记(七)——