段描述符與段選擇子

2021-09-11 19:06:55 字數 2781 閱讀 3101

存放的是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指示從區域性描述...