【问题标题】:The difference between "call gate" and "Software interrupt?“调用门”和“软件中断”的区别?
【发布时间】:2021-12-29 21:41:53
【问题描述】:

这些是调用内核函数的安全、低权限的方法。

我不知道两者的区别。

【问题讨论】:

    标签: assembly x86 kernel intel


    【解决方案1】:

    您可以查看英特尔手册中的所有内容;但简而言之:

    1. Call Gate 不会禁用中断。
    2. Call Gate 可以在特权开关的堆栈之间复制 N 个参数。
    3. Call Gate 可以是 LDT 私有的
    4. 如果您的编译器恰好支持 intel medium,large 编译模型,Call Gate 可以伪装成一个普通函数指针。
    5. 给定 4,正常的“ret”指令撤消调用门入口。
    6. 几乎没有人使用过呼叫门。

    而:

    1. 中断门禁用中断。
    2. 中断门不关心参数。
    3. IDT 是一种全球资源。
    4. 中断的调用序列在函数中非常独特。

    【讨论】:

    • 中断门可以保持中断启用 - 这取决于它们是在 IDT 中被声明为“中断”还是“陷阱”。 (我花了几天的时间寻找一个错误,直到我发现这个......) Solaris(SunOS)正在使用“Call Gates” - 至少在旧版本中是这样。根据维基百科,它们也常用于 OS/2 和 Windows 95。
    猜你喜欢
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    • 2013-09-21
    • 2017-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    相关资源
    最近更新 更多