当前位置: 首页 > 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…...

大模型Transformer架构学习

基础知识&#xff1a; 损失函数&#xff1a;梯度下降单次训练过程过拟合数据增强&#xff1a;增加训练数据&#xff0c;对原始数据加噪&#xff0c;翻转&#xff0c;旋转 正则化&#xff1a;防止该函数过分变化&#xff0c;让损失函数加上该参数&#xff0c;调整损失函数时会抑…...

Word制表位全攻略:从菜鸟到高手,5分钟搞定专业文档排版

Word制表位全攻略&#xff1a;从菜鸟到高手&#xff0c;5分钟搞定专业文档排版 你是否曾经为了对齐文档中的文字而疯狂敲击空格键&#xff1f;或是花费大量时间调整表格边框却依然无法让数字完美对齐&#xff1f;这些困扰其实只需要掌握一个Word中的隐藏神器——制表位&#x…...

字节跳动“卷”到离谱!裸辞后我投身大模型风口,90天逆袭成“AI小子”!

个人自我介绍 鄙人出生于南方小乡镇&#xff0c;为了走出小镇&#xff0c;在当地够拼够努力&#xff0c;不是自夸&#xff0c;确确实实也算得上“别人家的小孩”&#xff0c;至少在学习这件事情少&#xff0c;没有要家里人操过心。 高考特别顺利&#xff0c;一个老牌985&#x…...

3个核心突破:LangChain的大语言模型应用开发指南

3个核心突破&#xff1a;LangChain的大语言模型应用开发指南 【免费下载链接】langchain LangChain是一个由大型语言模型 (LLM) 驱动的应用程序开发框架。。源项目地址&#xff1a;https://github.com/langchain-ai/langchain 项目地址: https://gitcode.com/GitHub_Trending…...

避坑指南:为什么你的神经网络总过拟合?Dropout层参数设置全解析

避坑指南&#xff1a;为什么你的神经网络总过拟合&#xff1f;Dropout层参数设置全解析 训练神经网络时&#xff0c;最令人沮丧的莫过于看到验证集准确率在某个点突然停滞不前&#xff0c;而训练集指标却持续攀升——典型的过拟合信号。作为从业者&#xff0c;我们常陷入两难&a…...

探索CLIP-ViT-H-14:5大突破重新定义多模态AI应用

探索CLIP-ViT-H-14&#xff1a;5大突破重新定义多模态AI应用 【免费下载链接】CLIP-ViT-H-14-laion2B-s32B-b79K 项目地址: https://ai.gitcode.com/hf_mirrors/laion/CLIP-ViT-H-14-laion2B-s32B-b79K 你是否想过让计算机像人类一样同时理解图像和文字&#xff1f;CLI…...

收藏!国内大厂大模型人才招聘真相,小白/程序员入门必看

在大模型技术飞速迭代的当下&#xff0c;国内各大互联网大厂对大模型高端人才的投入力度已然拉满&#xff0c;几乎每家头部企业都推出了针对顶尖人才的专项招聘计划&#xff0c;而这些计划的核心共性&#xff0c;就是“高薪兜底”搭配“高门槛筛选”&#xff0c;成为行业内最引…...

mPLUG-Owl3-2B与SpringBoot微服务整合:Java开发者实战指南

mPLUG-Owl3-2B与SpringBoot微服务整合&#xff1a;Java开发者实战指南 1. 开篇&#xff1a;为什么要在SpringBoot中集成多模态AI 如果你是一个Java开发者&#xff0c;可能已经习惯了处理传统的业务逻辑和数据操作。但现在AI时代来了&#xff0c;特别是多模态AI这种能同时理解…...

联合仿真模型验证:Carsim + 车辆动力学模型(十四自由度)实践

联合仿真模型验证Carsim车辆动力学模型(十四自由度)软件使用:Carsim2019.0Matlab/Simulink 适用场景:采用模块化建模方法&#xff0c;搭建14自由度整车模型&#xff0c;将此模型与carsim进行联合仿真模型验证。 (模型和 carsim存在一定误差) 产品 simulink源码包含如下模块:工况…...

Llama-3.2V-11B-cot保姆级教程:Streamlit界面按钮/状态/动效设计逻辑

Llama-3.2V-11B-cot保姆级教程&#xff1a;Streamlit界面按钮/状态/动效设计逻辑 1. 工具概览与核心价值 Llama-3.2V-11B-cot是基于Meta多模态大模型开发的高性能视觉推理工具&#xff0c;专为双卡4090环境优化。这个工具最大的特点是让复杂的多模态模型变得简单易用&#xf…...