两张图看懂GDT、GDTR、LDT、LDTR的关系
生活随笔
收集整理的這篇文章主要介紹了
两张图看懂GDT、GDTR、LDT、LDTR的关系
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
段選擇器: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處理器仍然使用xxxx:yyyyyyyy(段選擇器:偏移量)邏輯方式表示一個線性地址,那么是怎么得到段的基址呢?在上面說明中我們知道,要得到段的基址首先通過段選擇器xxxx中TI位指定的段描述符所在位置: 當 TI=0時表示段描述符在GDT中,如下圖所示:① 先從GDTR寄存器中獲得GDT基址。② 然后再GDT中以段選擇器高13位位置索引值得到段描述符。③ 段描述符符包含段的基址、限長、優先級等各種屬性,這就得到了段的起始地址(基址),再以基址加上偏移地址yyyyyyyy才得到最后的線性地址。
當TI=1時表示段描述符在LDT中,如下圖所示:① 還是先從GDTR寄存器中獲得GDT基址。② 從LDTR寄存器中獲取LDT所在段的位置索引(LDTR高13位)。③ 以這個位置索引在GDT中得到LDT段描述符從而得到LDT段基址。④ 用段選擇器高13位位置索引值從LDT段中得到段描述符。⑤ 段描述符符包含段的基址、限長、優先級等各種屬性,這就得到了段的起始地址(基址),再以基址加上偏移地址yyyyyyyy才得到最后的線性地址。
段描述符: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處理器仍然使用xxxx:yyyyyyyy(段選擇器:偏移量)邏輯方式表示一個線性地址,那么是怎么得到段的基址呢?在上面說明中我們知道,要得到段的基址首先通過段選擇器xxxx中TI位指定的段描述符所在位置: 當 TI=0時表示段描述符在GDT中,如下圖所示:① 先從GDTR寄存器中獲得GDT基址。② 然后再GDT中以段選擇器高13位位置索引值得到段描述符。③ 段描述符符包含段的基址、限長、優先級等各種屬性,這就得到了段的起始地址(基址),再以基址加上偏移地址yyyyyyyy才得到最后的線性地址。
當TI=1時表示段描述符在LDT中,如下圖所示:① 還是先從GDTR寄存器中獲得GDT基址。② 從LDTR寄存器中獲取LDT所在段的位置索引(LDTR高13位)。③ 以這個位置索引在GDT中得到LDT段描述符從而得到LDT段基址。④ 用段選擇器高13位位置索引值從LDT段中得到段描述符。⑤ 段描述符符包含段的基址、限長、優先級等各種屬性,這就得到了段的起始地址(基址),再以基址加上偏移地址yyyyyyyy才得到最后的線性地址。
總結
以上是生活随笔為你收集整理的两张图看懂GDT、GDTR、LDT、LDTR的关系的全部內容,希望文章能夠幫你解決所遇到的問題。