zoukankan      html  css  js  c++  java
  • DPL, CPL及RPL之间的关系

    DPL: Descriptor Privilege Level

    1) GDT/LDT表中的描述符

    GDT/LDT表中的描述符,描述的是一段内存。

    其中的DPL代表着GDT/LDT中的描述符描述的内存段的特权级别。

    比如,当前正在执行的代码,它的特权级别就是当前的CS段选择子指向的段描述符中的DPL所决定的。

    即DPL是描述一段内存的特权级别。

    2) IDT表中的描述符

    IDT表中的描述符,描述的是一个门。

    门的概念,与“植物大战僵尸”里面的传送门类似:

    Gate

    假设,上图中的每一行都是有特权级别的,上面行的特权级别比下面行的特权级别高,那么从A处发出的豌豆是无法打中B处的僵尸的。

    但是有了传送门,它可以帮忙将A出打出的豌豆提升到B处,从而打中B处的僵尸。

    Gate Descriptor的作用也类似,它可以用来帮助提升请求请求代码的特权级别。

    使原本没有特权执行内核态代码的用户态程序,可以在Gate的帮助下,执行内核态的代码。

    CPL:Current Privilege Level

    代表着当前执行的代码段的特权级别

    RPL:Request Privilege Level

    用于描述段选择子。

    段选择子是用来选择GDT/LDT中段描述符描述的内存段的。

    RPL代表着一次申请访问估内容时,使用的特权级别,用RPL来代替请求程序本身的CPL,用于特权级别检查。

    下面我们查看一个例子:

    IDT中第0x80项代表“系统调用”的入口:

       1: [  80] 0x00000060[index=000C, TI=0, RPL=0] : 0xc152c898, P[1] DPL[3] Type[       Trap Gate] 

    而它里面的0x00000060段选择子,选择的是GDT中的0x000C项

       1: [   C] 0x00000000 : 0xffffffff, G[1] D/B[1] P[1] DPL[0] S[1] Type[11] Code[Read-Enable Accessed ]

    根据这个例子,我们可以理解为

    1) 用户态程序的CPL为3, 它请求的Gate描述符项的DPL为3,请求通过。

    2) Gate描述符进一步代表用户态程序请求访问内核态的代码段时,RPL为0, 而目标代码段的DPL也为0,这一步请求也通过。

  • 相关阅读:
    python 中文文档地址总结
    清除celery 任务队列
    celery work logging 问题
    mysql 数据库 存储数据类型
    python 补0的方法
    lunix 命令积累
    python3 import Crypto 失败的解决办法 (AES对称加密使用 模块)
    从excel 获取内容 模块:xlrd
    api h5 sdk 接入的说明
    Excel 打开两个单独的页面
  • 原文地址:https://www.cnblogs.com/long123king/p/3501554.html
Copyright © 2011-2022 走看看