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

《真象还原》读书笔记——第五章 保护模式进阶,向内核迈进(特权级,更新)

5.4 特权级深入浅出

5.4.1 特权级哪点事

计算机 访问 可分为访问者和被访问者。
建立特权机制为了通过特权来检查合法性。
0、1、2、3级,数字越小,权力越大。
0特权级是系统内核特权级。
用户程序是3特权级,被设计为“有需求就找操作系统”,所以不需要太大能力。

5.4.2 TSS 简介

Task State Segment 任务状态段。用于存储任务环境。104字节是TSS的最小尺寸,根据需要还可以接上个IO位图。

当任务在特权级变化的时候,如果说使用同一个栈来容纳所有特权级的数据,就会导致栈中数据混乱、栈溢出的问题。
所以TSS 中有3个栈。分别是:
ss0,sp0
ss1,sp1
ss2,sp2

TSS是处理器硬件原生的系统级数据结构。
特权级分为两类:

  1. 低特权到高特权级
    此时 3 可以到 2 1 0 ,2 可以到 1 0 ,1 可以到 0。这被称为“向内层转移”。
  2. 高特权级到低特权级。
    在处理器 从 低到高特权时,会自动地将低特权级的栈地址(SS 和 ESP)压入转移后的高特权级所在的栈中。在返回的时候,使用如retf / iret 从高到低的时候,处理器从当前高特权级的栈中将低特权级的栈段选择子和偏移量取回。 由高到低,过程被称为"向外层转移。

TSS 也是要加载的,由 TR 寄存器加载。每次执行不同任务时候,将TR寄存器加载不同的TSS就可以了。

5.4.3 CPL 和 DPL 入门

CPL 当前特权级
DPL 目标代码段的描述符上的特权级
RPL 请求特权级

处理器当前特权级的真实面目是什么?
在任意时刻,当前特权级CPL保存在CS选择子中的RPL部分。

当前特权级为什么会变化?
当处理器从一个特权级的代码段转移到另一个特权级的代码段上执行的时候。

访问者就是当前代码段中的指令。任何时候不允许访问比自己特权更高的资源。无论是数据还是代码,在不涉及RPL的情况下分情况讨论

  1. 受访者——数据段
    访问者特权级 >= 被访问资源特权级
  2. 受访者——代码段
    只能平级访问

既执行高特权级代码段上的指令,又不提升特权级,一方面是利用一致性代码段
1. 代码段是非一致性代码段,所以只能平级转移。
3. 一致性代码段(依从代码段)指如果自己是转移后的目标段,自己的特权级(DPL)一定要大于等于转移前的CPL。数值上 CPL >= DPL。一致性代码转移后的特权级不予自己的特权级(DPL)为主,而是与转移前的低特权级一致。

代码段:(比较为数值比较)
一致:CPL >= DPL:CPL 不变:低访问高
非一致:CPL == DPL:CPL 不变:平级访问

5.4.4 门、调用门 与 RPL 序

门结构就是记录一段程序起始地址的描述符。
描述符中有DPL。
任务门可以放在GDT、LDT、IDT中
调用门可以位于GDT、LDT中
中断和陷阱门只能在IDT中,不能主动调用,只能由中断信号触发。
都是来实现 低特权级转高特权级。

  1. 调用门
    call 、jmp
  2. 中断门
    int
  3. 陷阱门
    int3
  4. 任务门
    以任务状态段TSS为单位,用来任务切换。

实际上这些门都是有“门槛”的,就是 门描述符DPL
数值上:
当前特权级 CPL <= 门的DPL
当前特权级 CPL >= 门中目标代码段的DPL

在这里插入图片描述
调用门也是需要选择子的。既然门是指向某个内核例程,是例程就需要参数。
调用门如何在用户3特权级下位0特权级下的内核程序传递参数?
处理器的设计,在固件上实现了参数的复制,既将用户压在3特权级下的参数自动复制到0特权级的栈中。参数需在栈中按顺序挨着,处理器只需要知道有几个参数就好。

5.4.5 调用门的过程保护

调用门涉及2个特权级,CPL和门中目标代码的DPL。
用户进程通过call指令调用“调用门”过程。

  1. 在低特权级栈中压入参数。
  2. 处理器自动从TSS中找到高特权级的栈选择子SS和栈指针ESP。
  3. 检查新栈段描述符DPL和TYPE。
  4. 如果目标代码段的DPL 特权级高于 CPL。将ss_old和esp_old保存到其他地方,使用新栈。
  5. 将SS_old 和 ESP_old压入当前的高特权栈中。
  6. 将用户栈中参数复制到新栈。
  7. 段间远调用所以压入当前cs_old 和 eip_old。
  8. 将门中代码段选择子载入 CS,偏移量放入 EIP。

如果是平级处理,则不需要更新当前栈。
retf使用时:

  1. 先检查CS选择子中的RPL特权级检查.
  2. 获取CS_old 和 EIP_old并对 代码段的DPL 和 选择子中的RPL做特权级检查。如果通过,则从栈中弹出数据,eip_old到eip,CS_old到cs。
  3. 增加esp_new的值跳过栈中的参数。
  4. 如果第一步中改变了特权级,此时从栈中弹出esp_old和 ss_old。恢复旧栈。
    注意:返回的时候会检查数据段寄存器 DS、ES、FS、GS内容,如果其中选择子指向的数据段描述符DPL权限大于返回后的CPL,处理器会把数值0填充到相应的段寄存器中引发异常。

5.4.6 RPL的前世今生

在访问代码段的时候,是一个特权限制条件;
在访问数据段的时候,将CPL赋值给RPL 确定对数据操作的真实身份是用户还是操作系统。

要让受访问者清除真正请求资源的是用户还是系统。
在请求某特权级位DPL级别的 资源(数据) 的时候,参与检查的除了 CPL 还要加上 RPL。
数值上:
CPI <= DPL && RPL <= DPL
;
为了安全起见 操作系统会将RPL改为用户程序的CPL。
RPL引入是为了避免低特权级的程序访问高特权级的资源。

符合的样例如 0 <= 3 && 3 <= 3 当前为系统权限,之前是用户,对用户数据操作
或是 0 <= 3 && 0 <= 3 当前为系统权限,之前是系统,对用户数据操作
或是 0 <= 0 && 0 <= 0。当前为系统权限,之前是系统,对系统数据操作

特权级检查发生在什么时候?
在段寄存器中加载选择子访问描述符的时候。

不通过调用门直接访问数据和代码时的特权级检查规则
代码段

  • 目标非一致代码段
    数值上 CPLRPL目标代码段DPL
  • 一致性代码段
    数值上 CPL >= 目标代码段 DPL && RPL >= 目标代码段DPL。

数据段
数值上: CPL <= 目标数据段 DPL && RPL <= 目标数据段 DPL。
栈段
数值上:CPLRPL用作栈的目标数据段DPL。

对于门来说,处理器在检查特权级时:

  1. 要求CPL 和 RPL 在 DPL_GATE 和 DPL_CODE 之间
  2. (选择子上的)RPL 只在近调用门时 和 DPL_GATE 比较一次,然后 CPL 和 DPL_CODE 比较。
    数值上:DPL_GATE >= CPL >= DPL_CODE
    数值上:RPL <= DPL_GATE。

调用门使用 call 指令 和 jmp 指令。
jmp 只能平级

数值上:CPL == 目标代码段DPL
数值上:DPL_GATE >= CPL = =DPL_CODE && RPL <= DPL_GATE。

jmp就是被设计用于平级转移的。所以jmp 只用在不需要特权级变化,且不从调用门返回的场合。

相关文章:

《真象还原》读书笔记——第五章 保护模式进阶,向内核迈进(特权级,更新)

5.4 特权级深入浅出 5.4.1 特权级哪点事 计算机 访问 可分为访问者和被访问者。 建立特权机制为了通过特权来检查合法性。 0、1、2、3级&#xff0c;数字越小&#xff0c;权力越大。 0特权级是系统内核特权级。 用户程序是3特权级&#xff0c;被设计为“有需求就找操作系统”…...

艾德卡EDEKA EDI 需求分析

艾德卡Edeka 是德国最大的食品零售商&#xff0c;因其采用“指纹付款”的方式进行结算&#xff0c;成为德国超市付款方式改革的先驱。2022年8月&#xff0c;入选2022年《财富》世界500强排行榜&#xff0c;位列第256位。 艾德卡EDEKA EDI需求分析 传输协议 在传输协议层面&a…...

python如何使用最简单的方式将PDF转换成Word?

由于PDF的文件大多都是只读文件&#xff0c;有时候为了满足可以编辑的需要通常可以将PDF文件直接转换成Word文件进行操作。 看了网络上面的python转换PDF文件为Word的相关文章感觉都比较复杂&#xff0c;并且关于一些图表的使用还要进行特殊的处理。 本篇文章主要讲解关于如何…...

HashMap如何避免内存泄露问题

HashMap对于Java开发人员来说&#xff0c;应该是一种非常非常熟悉的数据结构了&#xff0c;应用场景相当广泛。 本文重点不在于介绍如何使用HashMap&#xff0c;而是关注在使用HashMap过程中&#xff0c;可能会导致内存泄露的情况&#xff0c;下面将以示例的形式展开具体介绍。…...

crontab -e定时任务

大家好&#xff0c;我是空空star&#xff0c;本篇带你了解下crontab -e定时任务。 文章目录前言一、crontab介绍二、crontab文件的含义四、crontab用法1.每隔5分钟执行一次命令2.每个小时的第5分执行一次命令3.每天9:05执行一次命令4.每隔9小时在第5分执行一次命令5.每月5号9号…...

JavaSE学习day7_01 面向对象

1. 类和对象 1.1 类和对象的理解 客观存在的事物皆为对象 &#xff0c;所以我们也常常说万物皆对象。即各个对象的总称&#xff0c;比如学生是一个类&#xff0c;但是学生有很多个&#xff0c;每一个称之为对象。 类 类的理解 类是对现实生活中一类具有共同属性和行为的事物的…...

有趣的HTML实例(十二) 早安、晚安动画(css+js)

这话在我心里已经复习了几千遍。我深恨发明不来一个新鲜飘忽的说法&#xff0c;只有我可以说只有你可以听&#xff0c;我说过&#xff0c;我听过&#xff0c;这说法就飞了&#xff0c;过去、现在和未来没有第二个男人好对第二个女人这样说。 ——《围城》 目录 一、前言 二、…...

入行测试已经4年了 ,进华为后迷茫了3个月,做完这个项目我决定离职....

转行测试 我是大专非计科&#xff0c;我转行之前从事的工作是商场管理&#xff0c;努力了4年左右的时间才做到楼层经理&#xff0c;但是工资太低并且事情太多&#xff0c;薪资才6K。 更多的是坚定了自己的想法&#xff0c;我要改变自己 恰好有几个大学同学在互联网公司工作&a…...

【halcon】灰度直方图直观理解与应用

灰度直方图 横坐标&#xff1a;是 0~255 表示灰度值的范围 纵坐标&#xff1a;是在不同灰度值下像素的个数&#xff01; 那么灰度直方图的本质就是统计不同灰度下像素的个数&#xff01; 它的直观目的&#xff0c;就是查看灰度的分布情况&#xff01; 与之相关的函数&#xff…...

Android笔记:动画

文章目录1.View Animation&#xff08;视图动画&#xff09;1.1 Tween Animation&#xff08;补间动画&#xff09;Animation 继承属性透明度alpha缩放scale移动translate旋转rotateset标签Animation父类共有函数1.2Frame Animation &#xff08;逐帧动画&#xff09;2.Propert…...

Git学习总结

目录 Git工作的基本流程图 git基本配置 配置SSH公钥 查看提交日志&#xff08;log&#xff09; 版本回退 为常用指令配置别名 添加文件至忽略列表 Git操作的基本指令 ​编辑 Git远程仓库的操作 把黑马的Git视频看完了黑马程序员Git全套教程&#xff0c;完整的git项目管…...

第四天笔记

1. 简述自定义转换器的使用过程&#xff1f; 第一步&#xff1a;定义一个类&#xff0c;实现 Converter 接口&#xff0c;该接口有两个泛型。 第二步&#xff1a;在 spring配置文件中配置类型转换器。  Spring配置类型转换器的机制是 将自定义的转换器注册到类型转换服务中去…...

《MySQL学习》 全局锁和表锁

一.MySQL锁的分类 二.全局锁 全局锁对整个数据库加锁&#xff0c;可以执行如下命令&#xff0c;整个数据库都将处于只读状态。 Flush tables with read lock ;我们可以执行 unlock table进行解锁 unlock table ;读操作 非读操作&#xff08;阻塞&#xff09; 全局锁的典型使…...

Altium Designer输出生产文件Gerber、IPC、NC Drill、坐标文件--AD

AD软件版本&#xff1a;22.2.1 gerber文件输出共有两部分&#xff1a; 1、Gerber Files:铜皮 和 外形分别导出 2、Nc Drill Files 分3次导出 一、Gerber Files 导出2次 设定原点 ** Edit->Origin->Set** 一般板边左下角为原点&#xff0c;可以根据自己板子形状确定 导…...

用VSCode搭建Vue.js开发环境及Vue.js第一个应用

目录 一、VSCode安装 二、VSCode简单配置 三、Vue.js的下载和引入 四、Vue.js第一个应用 一、VSCode安装 Visual Studio Code是一个轻量级但功能强大的源代码编辑器&#xff0c;可在您的桌面上运行&#xff0c;可用于Windows&#xff0c;macOS和Linux。它内置了对JavaScrip…...

Leetcode 每日一题 2341. 数组能形成多少数对

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法......感兴趣就关注我吧&#xff01;你定不会失望。 &#x1f308;个人主页&#xff1a;主页链接 &#x1f308;算法专栏&#xff1a;专栏链接 我会一直往里填充内容哒&#xff01; &…...

前后端分离-小项目-3前后端交互

第一步编写前端页面&#xff0c;第二步搭建后端环境&#xff0c;现在开始第三步&#xff0c;继续完善前端功能完善“添加”按钮功能Ajax异步请求安装在前端项目安装ajax。在Terminal输入&#xff1a;npm i axios -S点击“添加”按钮&#xff0c;弹出Dialog对话框设置对话框里面…...

Spring如何整合MyBatis框架?使用XML及java类的配置方式

前言 Spring文章链接: 从头到尾Spring概念&#xff0c;家族&#xff0c;核心技术使用&#xff0c;事务这一篇就够了&#xff01;&#xff01;&#xff01;_千小半的博客-CSDN博客_spring最新技术 mybatis文章链接: MyBatis框架入门(含实例)_mybatis sqlsession创建和关闭_千小…...

第七届蓝桥杯省赛——8冰雹数(递归)

题目&#xff1a;任意给定一个正整数N&#xff0c;如果是偶数&#xff0c;执行&#xff1a; N / 2如果是奇数&#xff0c;执行&#xff1a; N * 3 1生成的新的数字再执行同样的动作&#xff0c;循环往复。通过观察发现&#xff0c;这个数字会一会儿上升到很高&#xff0c;一会…...

Android 10.0 设置静态ip重启后获取不到ip的修复

1.概述 在定制化开发中,对于设置静态ip以后可以正常使用,但是遇到一个新问题 就是开机以后,获取不到ip 地址,这就有点不正常了,获取不到ip 就自然连不上网了,所以要分析问题所在解决问题 2.设置静态ip重启后获取不到ip的修复的核心代码 frameworks/opt/net/ethernet/java…...

mysql笔记

基础 概念 数据库体系结构的三级模式为&#xff1a;外模式、概念模式和内模式。 内模式&#xff1a;存储模式&#xff0c;对数据的物理结构和存储方式的描述。提供数据定义语言定义的。如顺序还是索引存储&#xff08;将概念模式定义的数据进行组织存储&#xff0c;达到较好…...

华为OD机试 - 最多等和不相交连续子序列(Python)| 真题+思路+考点+代码+岗位

最多等和不相交连续子序列 题目 给定一个数组,我们称其中连续的元素为连续子序列,称这些元素的和为连续子序列的和。 数组中可能存在几组连续子序列,组内的连续子序列互不相交且有相同的和。 求一组连续子序列,组内子序列的数目最多。输出这个数目。 输入 第一行输入为…...

第四届宁波网安市赛训练题

Crypto 散乱的密文 8fd4a4c94gf15{50}l72d3提示了2 1 6 5 3 4&#xff0c;我们直接横向排列 2165348fd4a4c94gf15{50}l72d3 按顺序竖着抄下来fc1l84f}a45dg034{2d957,然后栅栏解密&#xff0c;注意这里是W型栅栏解密&#xff0c;行数6 flag:flag{52048c453d794df1} 综合解密…...

Windows中MySQL 8.x版本忘记密码如何重设

Windows中MySQL 8.x版本忘记密码如何重置 文章目录Windows中MySQL 8.x版本忘记密码如何重置一、前言二、重置密码操作1、停止MySQL服务2、以安全模式启动MySQL服务3、无密码登录mysql4、重置登录密码5、验证密码是否重置成功三、最后我想说一、前言 好久之前在电脑下载的MySQL…...

【信管12.1】信息文档管理与配置管理

信息文档管理与配置管理对于项目管理来说&#xff0c;文档非常重要&#xff0c;如果是传统的工程行业项目的话&#xff0c;仅仅标书就是几百上千页的。相对来说&#xff0c;其实信息系统开发项目已经好很多了。另外就是配置项&#xff0c;它是比文档更大的一个概念&#xff0c;…...

一文搞懂Linux的标准输出/错误重定向

前言 今天在写一个脚本时&#xff0c;需要将shell命令和可执行程序的输出重定向在某一个log文件中&#xff0c;但是遇到了点小问题&#xff0c;索性就研究下输出重定向到底怎么回事。 Linux系统&#xff0c;有一个非常重要概念&#xff0c;就是一切皆文件。在使用shell脚本时&a…...

【OJ】计数的梦

&#x1f4da;Description: Bessie 处于半梦半醒的状态。过了一会儿&#xff0c;她意识到她好像在数羊&#xff0c;不能入睡。Bessie的大脑反应灵敏&#xff0c;仿佛真实地看到了她数过的一个又一个数。她开始注意每一个数码&#xff1a;每一个数码在计数的过程中出现过多少次…...

【项目实战】MySQL使用CONCAT字符串拼接函数实现与特殊字符的拼接

一、需求说明 因为有新功能需要上生产环境&#xff0c;总有一些乱七八糟的兼容历史数据的活要去做&#xff0c;比如以下。 需要批量的更新数据库中某个字段&#xff08;如id列中原来是ABCDEFG&#xff0c;需要改成[“ABCDEFG”]&#xff09;&#xff0c; 没错&#xff0c;就是…...

OpenCV实战(11)——形态学变换详解

OpenCV实战&#xff08;11&#xff09;——形态学变换详解0. 前言1. 腐蚀和膨胀运算1.1 腐蚀和膨胀基础1.2 使用形态学滤波器执行图像腐蚀和膨胀运算2. 开运算和闭运算2.1 使用形态学滤波器执行图像开运算和闭运算3. 形态学变换应用3.1 使用形态学滤波器检测边缘3.2 使用形态学…...

SPI协议详解(Standard SPI、Dual SPI和Queued SPI)

1、标准SPI 1.1、SPI接口的引脚 (1)SCLK&#xff1a;时钟线&#xff1b; (2)MOSI(master output slave input)&#xff1a;主设备输出&#xff0c;从设备输入&#xff0c;单向传输&#xff1b; (3)MISO(master input slave output)&#xff1a;主设备输入&#xff0c;从设备输…...

东莞微信网站建设怎样/百度知道合伙人答题兼职

作为过来人这个报错之前出现过好多次,但还是记录一下怎么解决这个问题 删除node-modules(快速删除node-modules之前有做记录),然后在重新instll 一遍就好了...

那些公司做网站比较厉害/网上销售渠道

为什么要做持久化存储?持久化存储是将 Redis 存储在内存中的数据存储在硬盘中&#xff0c;实现数据的永久保存。我们都知道 Redis 是一个基于内存的 nosql 数据库&#xff0c;内存存储很容易造成数据的丢失&#xff0c;因为当服务器关机等一些异常情况都会导致存储在内存中的数…...

备案网站还是域名/网站建设 全网营销

...

做塑胶原料用什么网站好/网站用户体验优化

AWS - 弹性计算云( Elastic Compute Cloud)Amazon EC2 (Elastic Compute Cloud)是一种Web服务接口&#xff0c;可在AWS云中提供可调整大小的计算容量。 它专为开发人员设计&#xff0c;可以完全控制Web扩展和计算资源。可以调整EC2实例的大小&#xff0c;并根据我们的要求按比例…...

我是做网站怎么赚钱/seo网站收录工具

WSAAsyncSelect模型允许应用程序以Windows消息的方式接收网络事件通知。许多对性能要求不高的网络应用程序都采用WSAAsyncSelect模型&#xff0c;MFC的CSocket类也使用了它。 WSAAsyncSelect自动把套接字设为非阻塞模式&#xff0c;并且为套接字绑定一个窗口句柄&#xff0c;当…...

展示型网站/广告免费推广网

Table of Contents 重试机制重试的必要性重试前提重试策略重试策略分析二进制指数退避策略二进制指数退避策略实操过程二进制指数退避策略原理Q&A附录 重试机制 本文介绍系统设计中&#xff0c;常见的重试机制。重点介绍二进制指数规避策略&#xff0c;从原理至实操&…...