Windows核心 (4) 資料段許可權檢查

2022-06-21 11:54:12 字數 971 閱讀 6539

cpl :cpl是當前執行的程式或任務的特權級。它被儲存在cs和ss的第0位和第1位上。通常情況下,cpl代表**所在的段的特權級。當程式轉移到不同特權級的**段時,處理器將改變cpl。只有0和3兩個值,分別表示使用者態和核心態。

dpl :如果你想訪問我,你應該具備什麼樣的許可權

rpl :用什麼許可權去訪問乙個段 rpl是通過段選擇子的第0和第1位表現出來的。

資料段許可權檢查遵循以下規則:

cpl<=dpl rpl<=dpl(數值上的比較)

cpl(current privilege level) :當前特權級

cs和ss中儲存的段選擇子後2位為cpl

dpl儲存在段描述符中,規定了訪問該段所需要的特權級別是什麼.

通俗的理解:

如果你想訪問我,那麼你應該具備什麼特權.

舉例說明:

mov ds,ax

如果ax指向的段dpl = 0 但當前程式的cpl = 3 這行指令是不會成功的!

rpl是針對段選擇子而言的,每個段的選擇子都有自己的rpl。

<1> 在3環能載入的資料段有哪些?

3環cpl=3,只能載入dpl=3的資料段。

<2> 在0環能載入的資料段有哪些?

0環cpl=0,滿足rpl<=dpl的資料段都可以載入。

<3> 詳細描述這下面**的執行過程:

mov ax,0x23

mov ds,ax

段選擇子是0x0023,rpl=11b=3,屬於最低許可權,只能訪問dpl=3的資料段。而cpl則無影響,不管是0環還是3環,都滿足cpl<=rpl,只要rpl滿足,cpl也一定滿足。

當執行 mov ds,ax 時,cpu先解析段選擇子0023,然後去gdt表找段描述符,檢查段描述符p位是否有效,然後檢查s位,確認是資料段或**段,然後檢查type域確認是資料段,然後看dpl是否等於3.只要上述條件都滿足,則mov指令執行成功,只要有一條不滿足,mov失敗。

windows核心 段暫存器

什麼是段暫存器?其實我們平常在od除錯中就可以看到,但是不會在意的,這裡顯示其實是段暫存器的一部分,稱為段選擇子,下面我們具體會講。還有就是我們平時在除錯中經常會看到的彙編 這裡其實我們真正寫入的位址是ds.base 0x12345678 除了在od中顯示的6個段暫存器以外其實還有2個,通常情況下,...

windows核心程式設計 程序許可權總結

1 首先,乙個程序要進行特權操作,例如修改其他程序記憶體資料的話,必須要有比較大的特權,一般來說,只有管理員賬號有這個許可權,那麼我們程式的第一件事情,就是確認當前啟動這個程序 的賬號,是否為管理員賬號 可以把這個函式當windows api來使用,這個函式返回bool值,當函式返回true成功,當...

(7)資料段許可權檢查

段和系統段描述符的許可權檢查方式並不一樣,詳見後續課程,本文只 資料段。dpl是段的許可權屬性,要想訪問乙個資料段,段選擇子和cpu當前許可權必須高於dpl。要注意,許可權數值越低,許可權越高,比如我們常說的0環,就是許可權最高的。rpl 段選擇子的許可權 dpl 段的許可權 cpl cpu許可權 ...