段描述符


事實上,在GDT中存放的不僅僅是段描述符,還有其它描述符(百度百科)。

一,段描述符的結構

描述符中指定了32位的起始地址和20位的段邊界,

實模式下,段地址要左移4位,

32位保護模式下,段地址是32位的線性地址,如果未開啟分頁功能,該線性地址就是物理地址。

其他位的作用

G 粒度位,

G位為0時,段界限以字節為單位,段的擴展范圍1B~1MB;

G位為1時,段界限以4KB為單位,段的擴展范圍4KB~4GB.

S 指定描述符的類型

S位為0時,表示系統段;

S位為1時,表示代碼段或數據段,棧段也是特殊的數據段。

DPL 特權級別

共有4種處理器支持的特權級別,0,1,2,3;

0是最高級別,3是最低級別;

描述符的特權級用於指定訪問該段所必須的最低特權級別,如果這里的數值為2,那么只有特權級別為0,1,2的程序才能訪問該段,特權級別為3的程序訪問該段時,將會被阻止。

P 段存在位  
D/B 默認的操作數大小  
L 64位代碼段標志 保留此位留給64位處理器使用
TYPE 指示描述符的子類型,或者說是類別

對於數據段,這4位分別是X,E,W,A;

對於代碼段,這4位分別是X,C,R,A;

AVL 軟件可以使用的位 操作系統來用,處理器並不使用它

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 二,幾個重要標志位的的作用

(一)DB位

  (1)對CS段的影響:

    D=1時,采用32位尋址方式;

    D=0時,采用16位尋址方式;

    前綴67改變尋址方式;

  (2)對SS段的影響:

    D=1時,隱式堆棧訪問指令(如:PUSH,POP,CALL)使用32位堆棧指針寄存器ESP

    D=0時,隱式堆棧訪問指令(如:PUSH,POP,CALL)使用16位堆棧指針寄存器SP

  (3)向下擴展的數據段:

    D=1時,段上限位4GB;

    D=0時,段上限位64KB;

(二)TYPE位

 

 (三)快速從描述符表中判斷一個描述符是代碼段還是數據段

  (1)結合段描述符高4字節的15,14,13,12這4個位先判斷是系統段還是數據代碼段

    15號位,P=1,有效;P=0,無效;

    14,13號位,權限位,Windows環境只有兩種權限,0和3,所以這兩位的數字要么全為0,要么全為1;

    再結合12號位;

    這4個位合在一起,在段描述符中對應的數字位F(權限位11)或9(權限位00)時,該描述符一定是數據段或代碼段;

  (2)再結合TYPE的最高位11位

    TYPE最高位為1,表示代碼段,此時,TYPE的4個位合起來的數值表示成十六進制一定不小於8;

    TYPE最高位為0,表示數據段,此時,TYPE的4個位合起來的數值表示成十六進制一定不大於8;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM