(20)PDE_PTE属性(U/S PS A D 有效位)
一、回顧
前面的課程中,我們學習了P位和R/W位,P決定物理頁是否有效,RW決定了物理頁的讀寫權限。
本節,將依次介紹U/S、PS、A、D位的含義。
二、U/S
U/S=0 表示特權用戶可訪問;
U/S=1 表示普通用戶可訪問。
回想一下之前學習段的時候,我們可以通過調用門,中斷門,任務門等方式將CPL提升到0,從而可以讀寫高2G內存。學習了U/S位后,我們可以不提權也能訪問高2G,只需要將想訪問的物理頁對應的PDE PTE的U/S位改寫為1即可。
下面是一個小實驗:
// PDE_PTE_US.cpp : Defines the entry point for the console application. //#include "stdafx.h" #include <Windows.h>int _tmain(int argc, _TCHAR* argv[]) {PDWORD p = (PDWORD)0x8003f00c;DWORD addr = (DWORD)p;printf("線性地址:0x%08x, 4*0x%x 4*0x%x 0x%x\n", addr, addr>>22,(addr>>12)&0x000002FF,addr&0x00000FFF);getchar();printf("讀高2G內存地址:%x\n", *p);return 0; }我在程序中已經把線性地址拆分好了,接下來只需要找到PDE PTE,將U/S改成1即可。
修改U/S位:
繼續執行程序:
總結:
1、2G以上是內核才能訪問的原因是U/S位的設置問題,如果將內核的某個頁
設置為1 就可以在R3訪問了
2、0 1 2是系統環 可以訪問系統頁和用戶頁 0環是特權級環 1、2環雖然不
是特權級環 但是是系統環 3環是用戶環 可以訪問用戶頁
三、PS
PS是PDE的第8位,PS是PAGE SIZE 的意思。我們之前遇到的PDE PS位大部分都是0;當PS=1,則PDE直接指向物理頁,以 0x8043f00c 為例,分析PS=1的情況。
拆分 8043f00c
?10 0000 0001 0x201
00 0011 1111 0x3f
00000000 1100? 0xc
隨便找一個進程的CR3,notepad.exe CR3=0ddb5000
查得PDE=004001e3
看看 8043f00c 的拆分結果,前10位是PDT的下標,通過它找到了PDE,后22位是物理頁偏移。
?10 0000 0001 0x201
00 0011 1111 0x3f
0000 0000 1100? 0xc
PDE指向大小為4MB的物理頁,即物理頁地址是 0x00400000,頁內偏移22位來自 0x8043f00c 的低22位,即 00 0011 1111 0000 0000 1100 ,十六進制是 0x3f00c
所以 0x8043f00c 物理地址是 0x0043f00c,驗證如下:
四、A
是否被訪問(讀或者寫)過 ,訪問過置1,即使只訪問一個字節也會導致PDE PTE置1。
五、D
臟位 是否被寫過 0沒有被寫過 1被寫過
六、關于G位,PWT位,PCD位
學完控制寄存器域TLB才能講,此處略過。
七、有效位
有效位在發生缺頁時(PTE的P=0)使用。關于這部分知識,等以后學習了內存管理的缺頁異常就知道了,這里簡單介紹一下。
總結
以上是生活随笔為你收集整理的(20)PDE_PTE属性(U/S PS A D 有效位)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (19)修改PDE PTE 的RW位使物
- 下一篇: (21)页目录表,页表基址(XP系统 1