gpt4 book ai didi

x86 - 访问代码段时的权限级别检查

转载 作者:行者123 更新时间:2023-12-02 22:44:02 25 4
gpt4 key购买 nike

我试图了解有关英特尔 x86 架构的一些细节。我还没有真正理解调用门机制,但如果没有它,为了访问不符合规范的代码段,它的 DPL 必须等于 CPL。

我确实理解在 DPL < CPL 的情况下它很重要,但为什么在 DPL > CPL 的情况下它被禁止?我的意思是,如果我们想保持相同的特权级别,则 CPL 可以在跳转后保持不变,如果我们想降低特权,我们可以使用 RPL 。

最佳答案

作为一般规则,当您直接访问代码段时,您只能对具有相同权限的段执行此操作。
这就是不合格代码段 (NCCS) 的用途。
英特尔还引入了一致性代码段(CCS),可以由低特权应用程序访问(以防内核需要共享一些代码而不提升调用者的特权)。

直接访问代码段不改变当前权限,目标代码的CPL就是调用者的CPL。

RPL 也不起作用。对于 CCS,它被忽略,并且对于 NCCS,它必须小于或等于调用者 CPL(这可能是副作用)。

规则是:

NCCS
1. 调用者CPL必须等于描述符DPL(相同特权)2. 无论选择器中使用的 RPL 是什么,目标代码都将以等于调用者 CPL 的 CPL 运行。3.选择器RPL必须小于或等于调用者CPL。

CCS
1.调用者CPL必须大于或等于描述符DPL(特权较低)2. 无论选择器中使用的 RPL 是什么,目标代码都将以等于调用者 CPL 的 CPL 运行。

如您所见,直接访问代码段不会更改 CPL(并且没有堆栈更改)。

为了更改权限 (CPL),英特尔引入了Call Gates。与数据段一样,通过 CG,RPL 可以让您模拟特权较低程序。
如果 CG DPL=2(并且目标选择器也具有 DPL>=2)并且您的代码具有 CPL=0,则您可以选择以 CPL=3 作为用户模式应用程序执行调用(从而无法获得访问权限)或者作为 CPL=2 的内核组件(获得访问权限,但无法调用其他更具特权的代码段)。

关于x86 - 访问代码段时的权限级别检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31074904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com