Content #
在保护模式的权限检查中使用了3种权限类型。
- CPL(Current Privilege Level)当前的权限级别,它指示当前运行的代码在哪个权限级别里,CPL的值存放在 CS寄存器Selector域的RPL,CS.Selector.RPL与SS寄存器的Selctor.RPL总是相等的,因此:SS.Selector.RPL也是CPL。
- DPL(Descriptor Privilege Level) DPL存放在Descriptor(包括Segment Descriptor和Gate Descriptor)里的 DPL域,它指示访问这些segment所需要的权限级别。Gate描述符的DPL值指示访问Gate的权限,并不代表由Gate所引用的Segment的权限。
- RPL(Requested Privilege Level) RPL存放在访问者所使用Selector的Bit 0和Bit 1位,它指示着发起访问的访问者使用什么样的权限对目标进行访问。因此,访问者可以使用不同的权限对不同的目标进行访问。当Selector被加载到段寄存器时,CS.RPL和SS.RPL 代表着当前的CPL值。
值得注意的是,数字越大权限越低,假如遇到以下的情况(在CPL与DPL的比较中): CPL>DPL 表示当前运行的权限级别不足,不能对segment或gate进行访问,只有在 CPL<=DPL的情况下才能对segment或gate进行访问。