**段和系統段描述符的許可權檢查方式並不一樣,詳見後續課程,本文只**資料段。
dpl是段的許可權屬性,要想訪問乙個資料段,段選擇子和cpu當前許可權必須高於dpl。要注意,許可權數值越低,許可權越高,比如我們常說的0環,就是許可權最高的。
rpl:段選擇子的許可權
dpl:段的許可權
cpl:cpu許可權
綜上所述,資料段許可權檢查遵循以下規則:
cpl <= dpl 並且 rpl <= dpl (數值上的比較)
只有滿足上述條件,才能成功訪問資料段。
總結:
cpl cpu當前的許可權級別
dpl 如果你想訪問我,你應該具備什麼樣的許可權
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失敗。
07 段許可權檢查
當我們要修改乙個段暫存器的時候,cpu會檢查當前程式有沒有許可權將段描述符載入到段暫存器中。cpu的分級 我們知道段選擇子分為三部分,其中0 1位為rpl,當段暫存器為cs的時候此時的rpl我們成為cpl,也就是我們當前程式的特權等級,我們下面用od隨便開啟乙個程式來看看它的特權等級 上圖段選擇子的...
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 使用...