保護模式(一) 段描述符與段選擇子

2022-07-10 16:42:11 字數 1881 閱讀 3975

結構

p位

p=1

:段描述符有效

p=0:段描述符無效

g位

g=0

:段暫存器limit單位為位元組,limit最大值0x000fffff

g=1:段暫存器limit單位為4kb,limit最大值0xffffffff

s位

s=1

:**段或資料段描述符

s=0:系統段描述符

type

如果s位為1

資料段:

a:是否被訪問過

w:是否可寫

e:是否向下拓展

**段:

r:是否可讀

c:是否為一致**段

如果s位為0

d/b位

對cs段:

d=1:採用32位定址方式

d=0:採用16位定址方式

對ss段:

d=1:隱式堆疊訪問命令使用32位堆疊指標暫存器esp

d=0:隱式堆疊訪問命令使用16位堆疊指標暫存器sp

隱式堆疊訪問命令(如push,pop,call)

對向下拓展的資料段:

d=1:段上限4gb

d=0:段上限64kb

dpl(描述符特權級別)

值為00或11
結構

rpl(請求特權級別)

ti

ti=0

:查gdt表

ti=1

:差ldt表

windows未使用ldt表

index

要用的段描述符為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 代...