任何人都可以向我解释细分之间的确切区别 描述符和门描述符?我正在尝试通过英特尔 手册,但无法弄清楚为什么我们需要Gate 描述?除了段描述符之外,它提供了哪些设施或支持机制?我们可以在尝试时进行特权级检查 访问段描述符也对吗?而且我猜Linux和 Windows不使用调用门描述符。或者它还有一种 在我们访问段描述符之前的保护层?我想知道门描述符的确切差异和需要。
答案 0 :(得分:2)
段描述符指定要用于寻址的段。段是由指令(movsb
,scasb
)预定义的,由指令形式预定义(在实模式中使用,例如bp
寻址基于ss
)或由...覆盖段覆盖前缀。段描述符存储在(G|L)DT
。
门描述符通常是IDT的问题。我们知道中断门(用于HW),陷阱门(这些用于处理器异常和软件中断)和任务门(用于HW任务切换)。它们之间的差异非常小(中断门禁止另一个中断直到实际完成),但在IDT中它们具有不同的位表示。
呼叫门是另一章。它们位于LDT
/ GDT
而不是IDT
。他们的类型位字段必须设置为1100b
,并且它们没有base
和limit
,但是应该用于代码的另一个段选择器,以及offset
分割。
call gate的基本功能:是指定...
offset
字段)功能列表来自here。
现代操作系统通常不使用调用门,而是存储在IDT
中的陷阱门,因为它们更快。使用int
或sysenter
调用这些“陷阱”(并使用iret/iretd
或sysexit
执行返回)。如果您想使用呼叫门,则需要GDT
/ LDT
,jump far
中的门描述符进入呼叫门,而ret far
返回。请注意,sysenter
和sysexit
指令仅在内核环(0)和用户环(3)之间传输控制,而调用门没有这些限制。