存放的是gdt(全域性描述符表)表的位置和大小,大小為48位
在windeg中 r gdtr 檢視gdt表的位置
r gdtl 檢視表的大小
gdt表裡面存放的元素稱為段描述符 大小為8位元組
dd +位址 檢視位址裡面的內容 檢視4位元組
dq +位址 檢視8位元組
eq +位址 +8位元組資料 往指定位址寫入資料
3環讀取gdtr暫存器值
char buff=;
_asm
buff裡面存的就是gdtr暫存器的值, 低兩位元組是gdt表的大小,高四位元組是gdt表的位址,一共6位元組。
p位 當p位位1時 段描述符有效 為0時無效
limit 長度為20位,高四位元組的16至19位 低四位元組的0至15位。 當g位為0時,limit的單位是位元組。為1時,limit的單位是4kb(fff)。加起來就是32位。
s位 當s位為1時,當前段描述符為**段或者資料段描述符。為0時,是系統段描述符。
段暫存器結構
word selectot //段選擇子
word attribute //屬性 段描述符高四位元組的第8位開始 到第23位結束
dword base //基位址
dword limit //界限
段選擇子是乙個16位的段描述符
串起來: 給乙個段暫存器賦值的時候 類似 mov ds,ax 實際上ds會被賦值96位 過程是這樣的
1:把ax看成段選擇子 經過段許可權檢查(段選擇子的rpl<=dpl)
2:看ti 位,如果為0,查gdt表。如果為1,查ldt表(windows只用gdt表所以這裡的值一定為0);
3:把第3至15位看成乙個索引,在gdt表中查出段描述符(8位元組),查出來的值給段暫存器賦值。
s位為1時
type域位於段描述符高4四位元組的第8至11位。
當第11位為0時:當前段為資料段
e 擴充套件方向 為0 向上擴充套件 為1 向下擴充套件windows只用了向上擴充套件,向下擴充套件會出錯。已測試
w 可寫 為1表示可寫,0表示不可寫
a 是否訪問 為1表示被訪問過,為0表示沒有被訪問過
當第11位位1時,當前段為**段。
a 是否訪問 為1表示被訪問過,為0表示沒有被訪問過
r 可讀 為1表示可讀,0表示不可讀
c 一致性 為1時 是一致**段,為0 非一致**段
非一致**段: 使用者許可權只能訪問使用者資料
一致**段: 使用者許可權可以訪問核心資料
s位為0時
解析段描述符**:
#include
"stdafx.h"
#include
#include
"stdio.h"
typedef
struct
gdt,
*pgdt;
void
segmentdesctiprotinfoparse
(pgdt pgdt)
printf
("當前段描述符的 dpl =%x\n"
,pgdt->dpl);if
(pgdt->s==0)
return;}
else
//計算base值
int base=pgdt->base_low+
(pgdt->base_middle<<16)
+(pgdt->base_high<<24)
;printf
("當前段描述符的base=%x\n"
,base)
;//計算limit值
int limit_high=pgdt->limit_high;
int limit=
(limit_high<<16)
+pgdt->limit_low;
if(pgdt->g==1)
printf
("當前段描述符的limit=%x\n"
,limit);}
}int
main
(int argc,
char
* ar**)
; gdt gdt;
memcpy
(&gdt,
&a,sizeof
(gdt));
segmentdesctiprotinfoparse
(&gdt)
;return0;
}
保護模式(一) 段描述符與段選擇子
結構 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 資料段...
段選擇器 段描述符 段描述符表 線性位址形成
買了本羅老師的琢石成器,才看前3章就感覺暈暈忽忽,總體覺得要看懂這本書前提是必須會dos彙編,了解32位彙編基礎.dos彙編本人只看了王爽老師的組合語言前11章,中斷這塊還沒有看,看來不看還是不行的。轉回來說,羅老師這本書前3章寫的很亂,尤其是描述符這塊,看了似懂非懂,通而不透。只能自己抽絲剝繭,捋...
段選擇器 段描述符 段描述符表 線性位址形成
段選擇器 32位彙編中16位段暫存器 cs ds es ss fs gs 中不再存放段基址,而是段描述符在段描述符表中的索引值,d3 d15位是索引值,d0 d1位是優先順序 rpl 用於特權檢查,d2位是描述符表引用指示位ti,ti 0指示從全域性描述表gdt中讀取描述符,ti 1指示從區域性描述...