Exception handling 将任务门与x86 IDT结合使用是处理内核模式(环0)堆栈故障异常的唯一方法吗?

Exception handling 将任务门与x86 IDT结合使用是处理内核模式(环0)堆栈故障异常的唯一方法吗?,exception-handling,kernel,Exception Handling,Kernel,假设内核总是在环0特权级别执行。对于堆栈故障异常(由于堆栈溢出或限制冲突),x86 IDT(中断描述符表)设置的陷阱门、中断门和任务门应使用哪个门 X86处理器需要堆栈在调用堆栈故障异常处理程序之前将eflags、CS、eip推送到堆栈上。这意味着需要堆栈开关来调用异常处理程序 使用任务门是执行堆栈切换的唯一方法吗 使用任务门是为内核堆栈错误编写堆栈错误处理程序的唯一方法吗 英特尔手动写入- “新tss允许处理程序在处理异常或中断时使用新的特权级别0堆栈。如果当前特权级别0堆栈损坏时发生异常或中

假设内核总是在环0特权级别执行。对于堆栈故障异常(由于堆栈溢出或限制冲突),x86 IDT(中断描述符表)设置的陷阱门、中断门和任务门应使用哪个门

X86处理器需要堆栈在调用堆栈故障异常处理程序之前将eflags、CS、eip推送到堆栈上。这意味着需要堆栈开关来调用异常处理程序

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

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

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


提前感谢您的回复。

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

  • 你的堆栈溢出了
  • GPF处理程序被调用,但它无法执行任何操作,因为R0堆栈已损坏
  • 进程尝试调用双重错误处理程序,但无法
  • 这个过程有三个错误
  • 如果您有TSS,则完成以下操作:

  • 你的堆栈溢出了
  • 处理器尝试调用GPF处理程序,导致taskswitch
  • 处理器切换任务,生成新堆栈
  • 一切照常进行