段選擇器 段描述符 段描述符表 線性位址形成

2021-06-01 19:45:08 字數 1236 閱讀 1315

買了本羅老師的琢石成器,才看前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指示從區域性描述符中ldt中讀取描述符。這些資訊總稱段選擇器(段選擇子).

段描述符:8個位元組64位,每乙個段都有乙個對應的描述符。根據描述符描述符所描述的物件不同,描述符可分為三類:儲存段描述符,系統段描述符,門描述符(控制描述符)。在描述符中定義了段的基址,限長和訪問內型等屬性。其中基址給出該段的基礎位址,用於形成線性位址;限長說明該段的長度,用於儲存空間保護;段屬性說明該段的訪問許可權、該段當前在記憶體中的存在性,以及該段所在的特權級。

段描述符表:ia-32處理器把所有段描述符按順序組織成線性表放在記憶體中,稱為段描述符表。分為三類:全域性描述符表gdt,區域性描述符表ldt和中斷描述符表idt。gdt和idt在整個系統中只有一張,而每個任務都有自己私有的一張區域性描述符表ldt,用於記錄本任務中涉及的各個**段、資料段和堆疊段以及本任務的使用的門描述符。gdt包含系統使用的**段、資料段、堆疊段和特殊資料段描述符,以及所有任務區域性描述符表ldt的描述符。

gdtr全域性描述符暫存器:48位,高32位存放gdt基址,低16為存放gdt限長。

ldtr區域性描述符暫存器:16位,高13為存放ldt在get中的索引值。

ia-32處理器仍然使用***x:yyyyyyyy(段選擇器:偏移量)邏輯方式表示乙個線性位址,那麼是怎麼得到段的基址呢?在上面說明中我們知道,要得到段的基址首先通過段選擇器***x中ti位指定的段描述符所在位置:

ti=0時表示段描述符在gdt中,如下圖所示:① 先從gdtr暫存器中獲得gdt基址。② 然後再gdt中以段選擇器高13位位置索引值得到段描述符。③ 段描述符符包含段的基址、限長、優先順序等各種屬性,這就得到了段的起始位址(基址),再以基址加上偏移位址yyyyyyyy才得到最後的線性位址。

當ti=1

段選擇器 段描述符 段描述符表 線性位址形成

段選擇器 32位彙編中16位段暫存器 cs ds es ss fs gs 中不再存放段基址,而是段描述符在段描述符表中的索引值,d3 d15位是索引值,d0 d1位是優先順序 rpl 用於特權檢查,d2位是描述符表引用指示位ti,ti 0指示從全域性描述表gdt中讀取描述符,ti 1指示從區域性描述...

段描述符與段選擇子

存放的是gdt 全域性描述符表 表的位置和大小,大小為48位 在windeg中 r gdtr 檢視gdt表的位置 r gdtl 檢視表的大小 gdt表裡面存放的元素稱為段描述符 大小為8位元組 dd 位址 檢視位址裡面的內容 檢視4位元組 dq 位址 檢視8位元組 eq 位址 8位元組資料 往指定位...

GDT表與段描述符

windows核心分析索引目錄 gdt表與段描述符 一 介紹 如果之前學習過 實模式 那很明白 段 的意義,在實模式中採用 段 偏移 的機制定址。現在,我們使用 保護模式 記憶體對於我們來說是平坦的。此時,段 對於我們來說,還有什麼意義呢?這時,段 相當於乙個管理者的角色,它有自己的base,但往往...