24 段描述符屬性

2021-09-24 05:49:38 字數 1257 閱讀 6325

s位用於指定描述符的型別,當s=0表示是乙個系統段,s=1則表示是乙個資料段或**段,對於系統段我們將在後面介紹。

type欄位有4位,用於指定描述符的子型別。對於type來說,當s=1或0時,type所表示的含義是完全不一樣的,這裡我們只討論s=1的情況。對於資料段來說,type有e,w,a三位;對於**段來說,type有c,r,a三位。

11位如果是0則表示該段是乙個資料段,如果11位是1表示該段是乙個**段。

對於資料段和**段來說,a位是已訪問位,表示該段是否已經被訪問過。a=1表示該段被訪問過,a=0說明該段沒有被訪問過。通常作業系統剛啟動的時候,該描述符是沒有被載入過的,那麼a位一定是0。

資料段:

e位:表示段的擴充套件方向,e=0表示向上擴充套件(即向高位址方向擴充套件),通常是普通的資料段;e=1表示向下擴充套件(也就是說向低位址方向擴充套件),通常是棧段。

w位:表示段是否可寫,w=0的段是不可寫,w=1的段是可寫的。

**段:

r位:表示**段是否可讀,r=0的段是不可讀的,r=1的段是可讀的

c位:是一致位,c=1表示一致**段,c=0表示非一致**段(後面會介紹)

到這裡,有同學可能會問我們怎麼區分乙個描述符是資料段或**段,還是系統段呢?

一般會根據12-15位來判斷,首先可以確定dpl的2位不是0就是1,因此我們只要關注s和p位都是1就行了,只要12-15位的組合是1001或者1111(十六進製制為9或f),我們就可以確定是否是乙個資料段或**段了,對應到gdt表的段描述符中的第5位。

借助type欄位的8-11位我們還可以近一步區分段描述符是乙個資料段還是**段,對應到gdt表的段描述符中的第6位,資料段的type欄位最大值是7,而**段的type欄位最小值是8,只要段描述符的第6位大於7的就是**段。

現在我們已經會分析乙個段描述符的是資料段還是**段了,對於資料段和**段的屬性分析,相信你應該也會了。

屬性描述符

在es5開始,所有屬性都具備了屬性描述符。我們可以通過object.getownpropertydescriptor來觀察到屬性的描述符,它是長這樣子的。object.getownpropertydescriptor a writable決定該屬性是否唯讀。enumerable決定該屬性是否可列舉。...

屬性描述符

property descriptor 屬性描述符 是乙個普通物件,用於描述乙個屬性的相關資訊 通過object.getownpropertydescriptor 物件,屬性名 可以得到乙個物件的某個屬性的屬性描述符 object.getownpropertydescriptors 物件 可以得到某...

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

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