[windows內核]段描述符屬性:S位_TYPE域

GDT表裏的段描述符可以簡單的分成兩大類
1.代碼或者數據段描述符
2.系統段描述符
怎麼區分這個就需要靠S位
在這裏插入圖片描述

S = 1 代碼段或者數據段描述符
S = 0 系統段描述符

我們先說S=1時候的情況,如果S位等於1那麼他就是一個代碼段或者數據段的描述符,我們怎麼快速區分呢
首先,S位在高32位的第5個字節裏,也就是和這幾個屬性看起來是一起的
在這裏插入圖片描述
在這裏插入圖片描述
我們首先前提條件就是P位是1,是有效的如果P位和S位都要同時爲1那麼滿足條件的有以下兩個(ps:DPL位只能全部爲0(訪問本段權限0)或者全部爲1(訪問本段權限3),這個屬性以後再解釋):
9=1001
F=1111
所以只有快速看高32位的第五個字節就能快速確定是否是有效段,是否是代碼或者數據段
如果還想往後分析這個具體是代碼段或者數據段就得看TYPE域屬性
在這裏插入圖片描述
如果TYPE域第11位爲0那麼它就是一個數據段
如果TYPE域第11位爲1那麼它就是一個代碼段
如果是這樣,我們也能通過觀察來快速確定是否是代碼段和數據段
TYPE域在高32字節中的第6位,也就是這裏
在這裏插入圖片描述
如果第11位爲1,那第6個字節一定大於等於8它就是代碼段,反正如果小於8那它就是數據段
如果是數據段那麼它下面三位就代表了它的其他屬性,我們一一來拆解
在這裏插入圖片描述
從表裏看它是有四個屬性分別是
Read Write accessed expand-down
A位(accessed):訪問位,表示該位最後一次被操作系統清理後,該段是否被訪問過,每當處理器將該段選擇符置入某個寄存器時,就在該位置1

W位(Write):該段描述數據是否可寫,如果可寫則爲1,反之爲0

E位(expand-down):擴展方向,如果爲1則是向下拓展的數據段,反之則不是,這裏的下不是字面意思的下,下面來舉個fs段寄存器的例子
在這裏插入圖片描述
簡單的來理解,如果E位爲0無效,那麼FS段寄存器合法操作的範圍就是fs.Base+Limit
如果E位爲1有效,那麼FS段寄存器合法操作範圍就是除去fs.Base+Limit這段範圍的其他範圍
更簡單來說如果E位爲1有效那麼段描述符的合法操作範圍就是取反操作,這樣更容易理解
ps:這裏段拓展的大小還和DB位有關,但現在不在這裏展開說。

如果是代碼段
那麼它也有四個屬性,我們來拆解一下
Read accessed Execute conforming
A位(accessed):和數據段描述一致
R位(Read ):可讀位
C位(conforming):一致位,C爲1的時候爲一致代碼段(這裏先不展開說)

如果S位是0 那麼該描述符就是系統描述符,系統描述符又分爲以下幾類
在這裏插入圖片描述
可以根據TYPE域的數值來進行對應的查找,這裏我們先不展開說系統描述符,只先理解怎麼拆分和查找

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章