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

2022-09-11 12:21:11 字數 1359 閱讀 4436

描述符屬性:db位

情況一:對cs段的影響

d = 1 採用32位定址方式

d = 0 採用16位定址方式

字首67 改變定址方式

情況二:對ss段的影響

d = 1 隱式堆疊訪問指令(如:push pop call) 使用32位堆疊指標暫存器esp

d = 0 隱式堆疊訪問指令(如:push pop call) 使用16位堆疊指標暫存器sp

情況三:向下拓展的資料段

d = 1 段上線為4gb

d = 0 段上線為64kb

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

cs:段後兩位稱為cpl:當前特權級,可以理解為當前程式它的特權級是什麼

注意:cs和ss段選擇子後兩位永遠都是相同的

dpl(descriptor privilege level) 描述符特權級別

dpl儲存在段描述符中,規定了訪問該段所需要的特權級別是什麼,通俗的理解為如果你想訪問我,那麼你應該具備什麼特權.

rpl(request privilege level) 請求特權級別

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

資料段的許可權檢查

參考如下**:

比如當前程式處於0環,也就是說cs段暫存器後兩位為0,cpl=0

mov ax,000b    //

1011 段選擇子後四位為11 ,rpl = 3

mov ds,ax //

ax指向的段描述符的dpl = 0

mov ax,000b //1011 段選擇子後四位為11 ,rpl = 3 mov ds,ax //ax指向的段描述符的dpl = 0

資料段的許可權檢查:

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

只有當cpl和rpl都小於等於dpl的時候,資料段的賦值才會成功

注意:**段和系統段描述符中的檢查方式並不一樣

總結:cpl cpu當前的許可權級別

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

rpl 用什麼許可權去訪問乙個段

為啥要有rpl?

本可以用「讀 寫」的許可權去開啟乙個檔案,但為了避免出錯,有些時候我們使用「唯讀」的許可權去開啟

24 段描述符屬性

s位用於指定描述符的型別,當s 0表示是乙個系統段,s 1則表示是乙個資料段或 段,對於系統段我們將在後面介紹。type欄位有4位,用於指定描述符的子型別。對於type來說,當s 1或0時,type所表示的含義是完全不一樣的,這裡我們只討論s 1的情況。對於資料段來說,type有e,w,a三位 對於...

段描述符屬性P位和G位

前言 段描述符屬性p位和g位筆記 自己在學習段描述符與段選擇子的時候有提出乙個問題,如下圖所示,這個問題老師在段描述符屬性p位和g位中提及 因為老師說段暫存器是有96位的,但是可以發現段描述符的64位再加上段選擇子16位,實際總共才是80位,那剩下的16位是從 來的呢?這裡再來看下段描述符的結構 首...

7 保護模式 段描述符DB位

b 0 64k 65535位元組 b 1 4g 指定的虛擬4gb空間 如果需要去16位的加個字首67 1.db位位於第22位 對以下三種情況都有影響 只要是 段都為b,只要是資料段都為d 情況一 對cs段的影響 d 1 採用32位定址方式 d 0 採用16位定址方式 字首67 改變定址方式 情況二 ...