結構
p位
p=1g位:段描述符有效
p=0:段描述符無效
g=0s位:段暫存器limit單位為位元組,limit最大值0x000fffff
g=1:段暫存器limit單位為4kb,limit最大值0xffffffff
s=1type:**段或資料段描述符
s=0:系統段描述符
如果s位為1
資料段:如果s位為0a:是否被訪問過
w:是否可寫
e:是否向下拓展
**段:
r:是否可讀
c:是否為一致**段
d/b位
對cs段:dpl(描述符特權級別)d=1:採用32位定址方式
d=0:採用16位定址方式
對ss段:
d=1:隱式堆疊訪問命令使用32位堆疊指標暫存器esp
d=0:隱式堆疊訪問命令使用16位堆疊指標暫存器sp
隱式堆疊訪問命令(如push,pop,call)
對向下拓展的資料段:
d=1:段上限4gb
d=0:段上限64kb
值為00或11結構
rpl(請求特權級別)
ti
ti=0index:查gdt表
ti=1
:差ldt表
windows未使用ldt表
要用的段描述符為gdt/ldt的基位址+index*8byte段描述符與段暫存器對應關係
selecter:段選擇子資料段許可權檢查attribute:從type到g位
base:【base
31:24】+【base 23:16】+【base address 15:00
】limit:
g位為0:000 +【seg limit
19:16】+【seg limit 15:0】
g位為1:【seg limit 19:16】+【seg limit 15:0】+fff
cpl(當前特權級)
cs和ss儲存的段選擇子後兩位舉例cpl=0:0環
cpl=3:3環
mov ax,000bh //**段許可權檢查1011 rpl=3
mov ds,ax //
ax指向的段描述符中dpl
檢查cpl
<=dpl && rpl<=dpl
非一致**段:cpl=dpl && rpl<=dpl一致**段:cpl>=dpl
段描述符與段選擇子
存放的是gdt 全域性描述符表 表的位置和大小,大小為48位 在windeg中 r gdtr 檢視gdt表的位置 r gdtl 檢視表的大小 gdt表裡面存放的元素稱為段描述符 大小為8位元組 dd 位址 檢視位址裡面的內容 檢視4位元組 dq 位址 檢視8位元組 eq 位址 8位元組資料 往指定位...
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 改變定址方式 情況二 ...
6 保護模式 段描述符屬性 S位 TYPE域
s 1 段或者資料段描述符 s 0 系統段描述符 注意 dpl在windows內只會出現兩種情況,全是0或者1 段那麼p為已經確定為1 s也為1 那麼dpl 為0 則是9 為1 則是f type域小於8則為資料段 大於8則是 段 資料段說明 8a 代表是否被載入如果訪問過則為1 反之則為0 9w 代...