【问题标题】:The difference between "call gate" and "Software interrupt?“调用门”和“软件中断”的区别? 【发布时间】:2021-12-29 21:41:53 【问题描述】: 这些是调用内核函数的安全、低权限的方法。 我不知道两者的区别。 【问题讨论】: 标签: assembly x86 kernel intel 【解决方案1】: 您可以查看英特尔手册中的所有内容;但简而言之: Call Gate 不会禁用中断。 Call Gate 可以在特权开关的堆栈之间复制 N 个参数。 Call Gate 可以是 LDT 私有的 如果您的编译器恰好支持 intel medium,large 编译模型,Call Gate 可以伪装成一个普通函数指针。 给定 4,正常的“ret”指令撤消调用门入口。 几乎没有人使用过呼叫门。 而: 中断门禁用中断。 中断门不关心参数。 IDT 是一种全球资源。 中断的调用序列在函数中非常独特。 【讨论】: 中断门可以保持中断启用 - 这取决于它们是在 IDT 中被声明为“中断”还是“陷阱”。 (我花了几天的时间寻找一个错误,直到我发现这个......) Solaris(SunOS)正在使用“Call Gates” - 至少在旧版本中是这样。根据维基百科,它们也常用于 OS/2 和 Windows 95。