保護模式101012分頁機制

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.!.!.!....

相關文章
相關標籤/搜索