07 段許可權檢查

2021-09-09 07:49:06 字數 877 閱讀 9551

當我們要修改乙個段暫存器的時候,cpu會檢查當前程式有沒有許可權將段描述符載入到段暫存器中。

cpu的分級:

我們知道段選擇子分為三部分,其中0~1位為rpl,當段暫存器為cs的時候此時的rpl我們成為cpl,也就是我們當前程式的特權等級,我們下面用od隨便開啟乙個程式來看看它的特權等級

上圖段選擇子的0~1位都為1,所以我們這個程式處於三環。

我們開啟windbg的暫存器視窗

從上面的cs看出為8,其cpl為0,所以是乙個0環的程式。

我們知道了rpl和cpl,那我們來看一下dpl

dpl為描述符的特權級別,規定了訪問該段所需要的特權級別。舉個例子,如下**:

mov ds,ax

如果ax指向的段的dpl = 0, 當前程式cpl = 3,則這行**不會執行成功。

資料段的許可權檢查:

假設當前程式處於0環,也就是cpl = 0,我們執行以下**

mov ax,000b //rpl = 1011

mov ds , ax //ax指向的段描述符dpl = 0

資料段的檢測:

在數值上cpl 和 rpl都要小於等於dpl, mov ds, ax才能執行成功;

rpl存在的原因,比如我們程式對乙個檔案有讀寫許可權,但是我們有的時候只需要開啟檔案進行讀操作,這時rpl就有意義了。

(7)資料段許可權檢查

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

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

cpl cpl是當前執行的程式或任務的特權級。它被儲存在cs和ss的第0位和第1位上。通常情況下,cpl代表 所在的段的特權級。當程式轉移到不同特權級的 段時,處理器將改變cpl。只有0和3兩個值,分別表示使用者態和核心態。dpl 如果你想訪問我,你應該具備什麼樣的許可權 rpl 用什麼許可權去訪問...

段描述符屬性DB位,段許可權檢查

描述符屬性 db位 情況一 對cs段的影響 d 1 採用32位定址方式 d 0 採用16位定址方式 字首67 改變定址方式 情況二 對ss段的影響 d 1 隱式堆疊訪問指令 如 push pop call 使用32位堆疊指標暫存器esp d 0 隱式堆疊訪問指令 如 push pop call 使用...