2

假设内核始终以 Ring 0 特权级别执行。对于堆栈错误异常(由于堆栈溢出或违反限制),应该使用哪个门来设置陷阱门、中断门和任务门之外的 x86 IDT(中断描述符表)?

X86 处理器在调用堆栈错误异常处理程序之前需要堆栈来将 eflags、CS、eip 压入堆栈。这意味着需要堆栈开关来调用异常处理程序。

使用任务门是执行堆栈切换的唯一方法吗?

使用任务门是为内核堆栈故障编写堆栈故障处理程序的唯一方法吗?

英特尔手册写道 :“新的 tss 允许处理程序在处理异常或中断时使用新的特权级 0 堆栈。如果在当前特权级 0 堆栈损坏时发生异常或中断,则通过任务门访问处理程序可以通过为处理程序提供新的特权级别 0 堆栈来防止系统崩溃”。

提前感谢您的回复。

4

1 回答 1

1

据我所知,是的。想象一下它是如何工作的:

  1. 你溢出了你的堆栈。
  2. GPF 处理程序被调用,但它不能做任何事情,因为 R0 堆栈已损坏。
  3. 该进程尝试调用双重故障处理程序,但不能。
  4. 过程三重故障。

如果您有 TSS,则完成以下操作:

  1. 你溢出了你的堆栈。
  2. 处理器尝试调用 GPF 处理程序,导致任务切换
  3. 处理器切换任务,产生新的堆栈。
  4. 一切照常进行。
于 2013-10-13T14:24:05.710 回答