Windows內核分析索引目錄:https://www.cnblogs.com/onetrainee/p/11675224.htmlhtml
保護模式101012分頁機制算法
在保護模式中,咱們都知道,所謂的內存地址是虛擬地址,不是物理地址。工具
可是,咱們是否想過,虛擬地址是隨便產生的嗎?固然不是,其實一些數字的組合。
spa
可這些數字是什麼意思呢?答案:序號。3d
經過序號查找表,一個序號對應找一張(物理表地址+屬性),這樣經過連續的序號,咱們能夠查找最終數據存放的物理地址。htm
如今,咱們瞭解一下 10-10-12分頁方式,即一個32位地址分別拆分紅10-10-12位,每位組成一個新的序號。
blog
1、WindowsXp設置以101012分頁啓動方式索引
在C:\boot.init(默認爲隱藏文件,工具-文件夾選項-顯示隱藏文件),將 "nonexecute-optin" 改成 "execute-optin"。進程
修改完以後重啓便可。內存
2、利用101012分頁算法將線性地址轉換爲物理地址,並從物理頁中讀出內容
1. 打開記事本,輸入"hello world"這個字符;以後使用CheatEngine工具附加,搜索該字符串,找到線性地址
2. 如今咱們獲得該字符串的線性地址爲 000B0C40,拆分紅2進制,並按照10-10-12來分:
00 0000 0000 | 00 1011 0000 | 1100 0010 0000 -> 0 | B0 | C40
其至關於三級目錄,所以,咱們須要獲取一級目錄的首地址。
該一級目錄地址每一個進程都存放於CR3寄存器中。
咱們經過windbg的 "!process 0 0" 指令,查看每一個進程的CR3值(DirBase),以下圖。
DirBase(CR3): 1491c000
3. 使用windbg依次查看物理內存
<1>Windbg中 dd表示查看線性內存,而 !dd 表示查看物理內存。
<2>內存地址後三個字節爲屬性,所以咱們查出地址後自動將後三個字節變爲零便可。
<3>10-10-12模式表示的是序號,咱們知道一個地址轉換成四字節,前兩級都是地址表,所以須要乘以*4。
0 | B0 | C3B -> 0 | 2C0(B0*4) | C40
1)查看一級地址值
kd> !dd 1491c000
#1491c000 14828067 14833067 14883067 00000000
#1491c010 14807067 00000000 00000000 00000000
2)查看二級地址值應該爲二級地址加上額外偏移。0f2c2000+0x2c0
kd> !dd 14828000+2c0
#148282c0 14a05067 14998067 14a09067 149fa067
#148282d0 1497b067 14a6c067 149ed067 1a57b067
3)三級地址其實就是物理頁地址,查字節,則不須要再進行擴大。
kd> !db 14a05000+c40 #14a05c40 68 00 65 00 6c 00 6c 00-6f 00 20 00 77 00 6f 00 h.e.l.l.o. .w.o. #14a05c50 72 00 6c 00 64 00 21 00-21 00 21 00 00 00 00 00 r.l.d.!.!.!....