10_PAE_非PAE

前置知識:

在 windows 中 保護模式 有兩種模式: 段保護 和 頁保護web

段保護 主要體如今 段選擇子上;可是數據段、代碼段、棧段等採用的都是4GB平坦模式,段的特徵並無那樣展示。因此具體的保護機制 採用的是頁保護。windows

PAE和 非PAE:

頁保護 有兩種:ide

  • 非 PAE測試

  • PAEspa

開啓 PAE:

在 boot.ini 中 設置:爲 noexcute -- 即不可執行 ;激活 DEP 的功能 -在這個時候 使用的是 PAE(由於早期的非PAE 並不支持數據執行保護);3d

1570358466469

選擇 爲 execute -optin 後 這裏的 數據執行保護 是灰色的 根本就不能設置。這時候 就是 非 PAE 模式下。相反 就是 PAE 模式下。orm

1570358224227

圖解 非 PAE:

1570362243698

圖解 PAE:

1570362601680

注意: 內核地址中 專門有一塊卻與用來存放 pte表、pde 表的 非pae 是 4MB , pae 因爲每項是8byte 因此變爲 8MB;blog

這裏 假設一個虛擬地址 0x403018 則:進程

1570368509955

手動模擬 解析 PAE地址:

  1. 獲取測試進程的cr3ci

    > !process 0 0 // 獲取當前進程列表,找到測試進程的 dirbase = cr3

    1570362758693

  2. 解析虛擬地址 0x403018

    > .formats 0x403018 // 查看二進制

    1570362901121

    而後手動分解 pdpte pde pte offset :

    ---// 00 000000010 000000011 000000011000

    ---// 0 2 3 18

  3. 結合windbg 找對應的物理地址:

    1. 找 pdpte 中的項 pde 的地址

      cr3 + 8*0

    2. 找 pde 中的項 pte 的地址

      pde + 2*8

    3. 找 pte 中 頁的地址

      pte + 3*8

    4. 頁的 地址 + offset 即 是 目標物理地址

      p + 18

  4. 如圖:

    1570363455610

    1570363577341

/i 進程調度的時候 切換 進程到指定進程:

g 運行起來 激活 調度;以致於到目標進程的時候停下來

1570367794662

查看 當前進程 的 cr3

1570367942197

使用 db 查看這時候進程空間 虛擬地址 數據

1570368037573

使用 windbg 解析 虛擬地址對應的物理地址:

!vtop 有兩個參數

第一個對應的是 cr3

第二個參數 是 對應進程的虛擬地址。

1570368115379

使用 !pte 0xaddr 查看對應addr 中的頁屬性(前提:必須切換到當前進程,cr3也須要切換到,即 !process 0 0; .process /i xxxxx;g;)

經過下面這兩個公式 解析出所在的 pde 、pte

1570369364940

1570369450390

修改pte 屬性,關閉dep

1570369215249

相關文章
相關標籤/搜索