2013-08-20 364 views
1

任何人都可以請解釋段 描述符和門描述符之間的精確區別嗎?我正在嘗試通過英特爾 手冊,但無法弄清楚爲什麼我們需要Gate 描述符?除段描述符外,它提供了什麼設施或支持機制?當我們嘗試 訪問段描述符時,我們可以執行特權級別檢查嗎?此外,我猜Linux和Windows不使用調用門描述符。或者,在我們訪問段描述符之前,它還有多少種保護層?我想知道門描述符的精確區別和需要。段描述符與門描述符

回答

2

段描述符指定要用於尋址的段。段由預定義的指令(movsb,scasb,scasb)按指令格式預定義(在實模式下使用,例如bp尋址基於ss)或被段覆蓋前綴覆蓋。段描述符存儲在(G|L)DT中。

門描述符通常是IDT的問題。我們知道中斷門(用於硬件),陷阱門(這些用於處理器異常和軟件中斷)和任務門(用於硬件任務切換)。它們之間的差異非常小(中斷門在實際完成之前禁止另一箇中斷),但在IDT中它們具有不同的比特表示。

調用門是另一章。他們居住在LDT/GDT而不是IDT。它們的類型位字段必須設置爲1100b,它們沒有baselimit,但是應該用於代碼的另一個段選擇器以及該段中的offset。 調用門的基本功能:是指定...

  1. 對象代碼段
  2. 的入口點可以由代碼一些最小特權可以使用任何程序(存儲在描述符表另一個段描述符的索引) (使用offset場)水平到堆棧之間被複制
  3. 可選參數的數量時發生任務切換(5個比特被保留用於此目的,所以最大值是31)在棧上的值的
  4. 尺寸(16/32位)

函數列表從here

現代操作系統通常不使用調用門,而是存儲在IDT中的陷阱門,因爲它們更快。使用intsysenter調用這些「陷阱」(並使用iret/iretdsysexit執行退貨)。如果您想使用呼叫門,則需要GDT/LDT,jump far中的門描述符進入呼叫門,ret far返回。請注意,sysentersysexit指令僅在內核環(0)和用戶環(3)之間傳輸控制,而調用門不具有這些限制。