当前位置: 首页 > news >正文

4. 权限,特权

  • 对数据段特权检查
  • 对直接转移的代码段特权检查
  • 栈段的检查
  • 调用门的检查

权限问题:

  • 由于CPL,DPL 无法完整表达权限的问题.
    例如用户程序(CPL=3)通过调用门(将调用到内核过程,从低权限到高权限)执行,此时CPL=0,此时可以为所欲为.
  • 因此加入RPL.此参数由操作系统来保证,CPU仅使用
    1. RPL: 想以哪种权限去访问, 操作系统来填写, 一个自由的参数
    1. 描述符里的DPL=CPL=CS.RPL(16位中的低2位)
    1. DPL:访问此描述符的权限

对于数据段的特权检查:

从大方向说:只要权限比数据段大 ,或者相等就OK
实际根据以下几个步骤:
CPL:当前CS段的RPL, RPL:请求这个数据段的权限, DPL: 数据段的权限

    1. 根据CPL, RPL , DPL 这3个来检查
    1. CPL <= DPL && RPL <= DPL

假设有 数据段 DPL= 2:

代码段CPL=0代码段CPL=1代码段CPL=2代码段CPL=3
RPL=0 可访问RPL=1可访问RPL=2可访问RPL=3 不可访问
RPL=1或2 可访问RPL=0 可访问RPL=1 可访问RPL=2 不可访问
RPL=3 不可访问RPL=2可访问RPL=0可访问RPL=1不可访问
  • 可以看到CPL=0的代码段,即使有最高权限,但如果RPL=3,也无法访问
  • 至于CPL=3的代码段,无论如何都无法访问,毕竟CPL>DPL

对跳转或调用的代码段检查

这里特指 call far , jmp far

  • jmp , call ,ret 这些都是段内的, 不需要重新加载cs , 因此不做检查
    1. 调用过程的CPL,RPL
    1. 转移到此处的目标描述符的DPL,C(是否是一致性代码段)
  • 综上CPL,RPL,DPL,C 4项参与检查
  • 又根据C 进行分别检查 if ( 1==C ){ 一致性代码段检查} else { 非一致性代码段检查}

如果C=0, 非一致性代码段的检查:

  • CPL == DPL , 必须是相同特权级, 否则产生异常
  • 由于只能是平级跳转,因此转移前后CPL不变
  • 对于RPL: RPL<=CPL即可,毕竟RPL是一种希望用哪种方式(权限)去访问,RPL并不会影响CPL,RPL只用于检查

假设非一致性代码段的描述符:DPL=2,C=0

非一致性代码段描述符代码段CPL=1代码段CPL=2代码段CPL=3
现有非一致性代码段的描述符:DPL=2,C=0CPL不一致,RPL=0~3都不可转移RPL=0~2都可以转移,RPL=3则无法转移CPL不一致,RPL=0~3都无法转移
--成功转移后,CPL不变,RPL只用作检查,而非赋值-

C=1, 一致性代码段检查(依从性)

  • RPL不参与检查
  • 满足: CPL>=DPL(一致性代码段), 也就是当前特权比目标代码段低或相等即可
  • 一旦转移后, CPL不改变,依旧保持之前调用者的

假设一致性代码段的描述符:DPL=1,C=1

一致性代码段描述符代码段CPL=1代码段CPL=2代码段CPL=3代码段CPL=0
一致性代码段的描述符:DPL=1,C=1可以访问可以访问可以访问不可以访问
  • RPL不参与检查,转移成功后CPL不改变

综上

  • 对于代码段, 主要还是看CPL
  • 对于数据段,需要RPL来辅助检查

栈段检查

  • CPL=RPL=DPL

调用门检查

  • 通过调用门可以执行一个高于本CPL的过程
  • 调用门指向了某个代码段内的某一个过程
  • 调用门本身也有DPL,想要使用调用门,调用者的CPL<=调用门DPL,也就需要达到使用调用门的权限
  • 访问调用门可以使用 jmp far , call far
  • 一旦访问了调用门,检查顺利后,根据调用门描述符内的 段选择子获取段描述符的基址 + 调用门内的偏移地址,就这个过程的线性地址
  • 调用门就是一个描述符,格式:
31 ~ 161514 ~ 131211 ~ 87 ~ 54 ~ 0
段内偏移高16位PDPL0TYPE(1100)000参数个数
31 ~ 1615 ~ 0
段选择子段内偏移低16位
  • 调用门需要4项检查:
  • 当前调用者的CPL
  • 调用门选择子RPL (操作系统 自己维护)
  • 调用门描述符DPL
  • 目标代码段描述符的DPL
  • 检查2步:
    1. 首先要满足 本身能够访问调用门:CPL <= 门DPL, RPL <= 门DPL
    1. 下表格:
指令一致性代码段非一致性代码段
call far代码段描述符DPL<=CPL代码段描述符DPL<=CPL
jmp far代码段描述符DPL<=CPL代码段描述符DPL=CPL
call far指令,栈切换CPl不发生变化,栈不切换CPL变成目标代码段的DPL,栈需要切换
jmp far 指令,栈切换CPL不变,栈不切换由于DPL=CPL,栈不切换
  • 再一次的强调,权限无法从高到低
  • 只有CPL变了,栈才会变,因此上面只有当call指令调用 非一致性代码段的时候, 才会切换栈, 除非CPL=DPL(例如CPL=0,目标代码段描述符的DPL=0)
  • 综上:
  • 对于一致性代码段: CPL>=目标代码段DPL, 不论JMP,CALL, 转移后CPL不变,栈不变
  • 对于非一致性代码段:
    1. CALL指令要求: CPL >= 目标代码段DPL , CPL变成目标代码段DPL, 切换栈(除非CPL=DPL,那么栈不变)
    1. JMP 指令: CPL = 目标代码段DPL , CPL不变,栈不变
  • 看上去内容有点多,需要到处判断,一会门检查,一会代码段DPL检查,还要考虑栈切换的问题
  • 实际没那么麻烦,也就2条需要注意的
    1. 一个是有权限访问门 ,也就是本身权限至少要与门相等 数值上: CPL <= 门DPL, RPL <=门DPL
    1. 调用者代码段的权限,要低于代码段或相等,也就是低权限到高权限,那么数值上: CPL>= 目标代码段DPL
  • 至于jmp 和 call 的区别不用记, 让CPU产生保护性异常(GP)告诉我们即可,一旦产生异常说明此处jmp 指令有问题了( CPL != DPL)
  • 对于栈的问题,一句话就解决,CPL一变, 栈跟着变 ; CPL不变,栈也不变

调用门的首次检查例子:

门描述符代码段A代码段B代码段C代码段D-
门DPL=3CPL=3CPL=2CPL=1CPL=0代码段A,B,C,D任意+RPL=0~3都可以访问
门DPL=2CPL=3,RPL=0~3都无法访问CPL=2,RPL=0~2可以访问,RPL=3无法访问CPL=1,RPL=0~2可以访问,RPL=3无法访问CPL=0,RPL=0~2可以访问,RPL=3无法访问A的CPL权限不足以访问门DPL;B,C,D的CPL全部满足,同时:RPL<=门DPL

相关文章:

4. 权限,特权

对数据段特权检查对直接转移的代码段特权检查栈段的检查调用门的检查 权限问题: 由于CPL,DPL 无法完整表达权限的问题. 例如用户程序(CPL3)通过调用门(将调用到内核过程,从低权限到高权限)执行,此时CPL0,此时可以为所欲为.因此加入RPL.此参数由操作系统来保证,CPU仅使用 RPL:…...

云原生系列Go语言篇-泛型Part 2

类型推导和泛型 就像在使用​​:​​时支持类型推导一样&#xff0c;在调用泛型函数时Go同样支持类型推导。可在上面对​​Map​​、​​Filter​​和​​Reduce​​调用中看出。有些场景无法进行类型推导&#xff08;如类型参数仅用作返回值&#xff09;。这时&#xff0c;必…...

借助ETL快速查询金蝶云星空表单信息

随着数字化转型的加速&#xff0c;企业信息化程度越来越高&#xff0c;大量的数据产生并存储在云端&#xff0c;需要进行有效的数据管理和查询。金蝶云星空是金蝶云旗下的一款云ERP产品&#xff0c;为企业提供了完整的业务流程和数据管理功能&#xff0c;因此需要进行有效的数据…...

基于深度学习的驾驶员状态监测预警系统(正文)

摘 要 近年来驾驶员因疲劳驾驶而造成的交通事故逐年增多&#xff0c;驾驶员的驾驶状态对道路和人身安全产生重大影响&#xff0c;因此做好驾驶员驾驶状态的管理及预警是非常有必要的。 随着深度学习在目标检测算法应用的不断深入&#xff0c;YOLOv5等目标检测算法也相继具有了广…...

读书笔记之《价值》张磊

读书笔记之《价值》张磊 自序 这是一条长期主义之路 长期主义——把时间和信念投入能够长期产生价值的事情中&#xff0c;尽力学习最有效率的思维方式和行为标准&#xff0c;遵循第一性原理&#xff0c;永远探求真理。 真正的投资&#xff0c;有且只有一条标准&#xff0c;那…...

【shell】文本三剑客之sed详解

目录 一、sed简介&#xff08;行编辑器&#xff09; 二、基本用法 三、sed脚本格式&#xff08;匹配地址 脚本命令&#xff09; 1、不给地址&#xff0c;那么就是针对全文处理 2、单地址&#xff0c;表示#&#xff0c;指定的行&#xff0c;$表示最后一行&#xff0c;/pattt…...

Centos7 制作Openssh9.5 RPM包

Centos7 制作Openssh9.5 RPM包 最近都在升级Openssh版本到9.3.在博客里也放了openssh 9.5的rpm包. 详见:https://blog.csdn.net/qq_29974229/article/details/133878576 但还是有小伙伴不停追问这个rpm包是怎么做的,怕下载别人的rpm包里被加了盐. 于是做了个关于怎么用官方的o…...

C语言--每日选择题--Day30

第一题 1. i 5&#xff0c;j 7&#xff0c;i | j 等于多少&#xff1f; A&#xff1a;1 B&#xff1a;3 C&#xff1a;5 D&#xff1a;7 答案及解析 D &#xff5c;这个是按位或运算符&#xff0c;两个数的二进制位&#xff0c;有1为1&#xff0c;同0为0&#xff1b; i的二进…...

LeetCode 274. H指数——排序

274. H 指数 给你一个整数数组 citations &#xff0c;其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。 根据维基百科上 h 指数的定义&#xff1a;h 代表“高引用次数” &#xff0c;一名科研人员的 h 指数 是指他&#xff08;她&…...

【洛谷 B2038】奇偶 ASCII 值判断 题解(顺序结构+取余)

奇偶 ASCII 值判断 题目描述 任意输入一个字符&#xff0c;判断其 ASCII 是否是奇数&#xff0c;若是&#xff0c;输出 YES&#xff0c;否则&#xff0c;输出 NO 。 例如&#xff0c;字符 A 的 ASCII 值是 65&#xff0c;则输出 YES&#xff0c;若输入字符 B(ASCII 值是 66…...

Ubuntu 20.4 源代码方式安装 cdo(笔记)

目录 动机安装过程python 调用cdo 动机 我找到的处理 era5-land 代码在需要用到 cdo&#xff0c;但是 sudo apt-get install cdo 总是出现 abort (core dump) 等问题&#xff0c;所以放弃这种安装方式&#xff0c;不走捷径&#xff0c;安装源代码&#xff0c;也就是 cdo-x.x.x…...

电子学会C/C++编程等级考试2022年12月(三级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:鸡兔同笼 一个笼子里面关了鸡和兔子(鸡有2只脚,兔子有4只脚,没有例外)。已经知道了笼子里面脚的总数a,问笼子里面至少有多少只动物,至多有多少只动物。 时间限制:1000 内存限制:65536输入 一行,一个正整数a (a < 327…...

二叉树的最近公共祖先(C++实现)

二叉树的最近公共祖先 题目思路代码&#xff08;详细注释&#xff09; 题目 二叉树的最近公共祖先 思路 我们可以通过两个栈来实现 实现一个FindPath函数&#xff0c;用来查找从根节点到目标节点的路径&#xff08;路径可以用栈来保存&#xff09; 路径保存好后&#xff0c;…...

【conda】容易遗忘的命令使用总结

1. 在空conda虚拟环境中安装python 退出到base环境 conda activate base 执行命令 conda install -n 空环境名 python版本名 例如&#xff1a; conda install -n test python3.10 2. 无需确认直接创建环境 在末尾加上-y&#xff0c;例如&#xff1a; conda create -n tes…...

蓝桥杯第一天-----时间显示

文章目录 前言一、题目描述二、测试用例三、题目分析四、具体代码实现总结 前言 本章中将相信介绍蓝桥杯中关于时间显示的题目。 链接&#xff1a;https://www.lanqiao.cn/problems/1452/learning/ 一、题目描述 二、测试用例 三、题目分析 1.输入的时间为毫秒&#xff0c;毫…...

多文件夹图片预处理:清除空值、重置大小、分割训练集

→ 清理空值 防止出现cannot identify image file 参考Python数据清洗----删除读取失败图片__简单版_python用pil读取图片出错删除掉-CSDN博客 import os import shutil import warnings import cv2 import iofrom PIL import Image warnings.filterwarnings("error&qu…...

【Java】集合 之 使用 Map

为什么使用Map 我们知道&#xff0c;List是一种顺序列表&#xff0c;如果有一个存储学生Student实例的List&#xff0c;要在List中根据name查找某个指定的Student的分数&#xff0c;应该怎么办&#xff1f; 最简单的方法是遍历List并判断name是否相等&#xff0c;然后返回指定…...

第二证券:股票几点到几点开盘?

作为股民或许投资者&#xff0c;我们都知道股票是每天都有开盘和收盘时间的。但是&#xff0c;关于股票的开盘时间&#xff0c;很多人并不是很清楚&#xff0c;特别是初学者。在本文中&#xff0c;我们将从多个视点分析股票开盘时间&#xff0c;并为大家供给一些有用的信息。 …...

goweb入门教程

本文是作者自己学习goweb时写的笔记&#xff0c;分享给大家&#xff0c;希望能有些帮助 前言&#xff1a; 关于web&#xff1a;本质 ​ ​ web中最重要的就是浏览器和服务器的request(请求)和response(响应)&#xff1b; ​ 一个请求对应一个响应。 一个请求对应一个响应&…...

量子计算:探索未来的计算技术

量子计算:探索未来的计算技术 引言 在过去的几十年里,我们见证了计算机技术从简单的计算和存储发展到复杂的数据处理和人工智能的飞速进步。然而,随着我们进一步探索科技的前沿,传统的计算方法开始显示出其局限性。在这种情况下,量子计算——一种基于量子力学原理的新型计…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

6.9-QT模拟计算器

源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...

2025年低延迟业务DDoS防护全攻略:高可用架构与实战方案

一、延迟敏感行业面临的DDoS攻击新挑战 2025年&#xff0c;金融交易、实时竞技游戏、工业物联网等低延迟业务成为DDoS攻击的首要目标。攻击呈现三大特征&#xff1a; AI驱动的自适应攻击&#xff1a;攻击流量模拟真实用户行为&#xff0c;差异率低至0.5%&#xff0c;传统规则引…...

2025.6.9总结(利与弊)

凡事都有两面性。在大厂上班也不例外。今天找开发定位问题&#xff0c;从一个接口人不断溯源到另一个 接口人。有时候&#xff0c;不知道是谁的责任填。将工作内容分的很细&#xff0c;每个人负责其中的一小块。我清楚的意识到&#xff0c;自己就是个可以随时替换的螺丝钉&…...

无需布线的革命:电力载波技术赋能楼宇自控系统-亚川科技

无需布线的革命&#xff1a;电力载波技术赋能楼宇自控系统 在楼宇自动化领域&#xff0c;传统控制系统依赖复杂的专用通信线路&#xff0c;不仅施工成本高昂&#xff0c;后期维护和扩展也极为不便。电力载波技术&#xff08;PLC&#xff09;的突破性应用&#xff0c;彻底改变了…...