切换至低特权级

x86权限简介

x86芯片支持四种特权级:第0级权限最高,用于运行操作系统:第3级权限最低,用于运行应用程序;其它两级用于运行操作系统服务(可选)。

image-20241212213118415

2,3等级用的少

Snipaste_2024-12-13_09-50-10

权限检查时,会综合比较CPL、RPL、DPL的值。当不符合检查规则时,存储访问将出现异常。

CPL字段指定是按照什么特权级执行的,RPL是放在DS,SS这些其他的寄存器中,因为x86这个权限划分实在是太复杂了,所以我们将操作系统代直接设定在Level 0这个特权级,然后建两个进程,这两个进程运行在特权级3这个模式下

系统上电,到进入到保护模式,到初始化之后,整个系统默认是运行在Level 0这个地方,怎么实现0特权级切换到进程的特权级3

因为内核代码段和内核数据段都是运行在特权级0,所以我们需要重新建立一个特权级为3的数据段和代码段

//os.h
#define APP_CODE_SEG            ((3 * 8) | 3)       // 特权级3
#define APP_DATA_SEG            ((4 * 8) | 3)       // 特权级3
//os.c
struct {uint16_t limit_l, base_l, basehl_attr, base_limit;}gdt_table[256] __attribute__((aligned(8))) = {// 0x00cffa000000ffff - 从0地址开始(平坦模型),P存在,DPL=3,Type=非系统段,32位代码段,界限4G[APP_CODE_SEG/ 8] = {0xffff, 0x0000, 0xfa00, 0x00cf},// 0x00cff3000000ffff - 从0地址开始,P存在,DPL=3,Type=非系统段,数据段,界限4G,可读写[APP_DATA_SEG/ 8] = {0xffff, 0x0000, 0xf300, 0x00cf},
};
//Start.S
_start_32:
、、、、、、
// 下面模拟中断返回,从而实现从特权级0到特权级3的变化
// 中断发生时,会自动压入原SS, ESP, EFLAGS, CS, EIP到栈中
push $APP_DATA_SEG //SS
push $task0_dpl3_stack + 1024	// 特权级3时的栈,ESP
push $0			// 中断暂时关掉 0x202						// EFLAGS格式
push $APP_CODE_SEG				// CPL=3时的选择子,CS
push $task_0_entry					// eip
iret							// 从中断返回,将切换至任务0,到了特权级3
、、、、、、
task_0_entry: //进程,需要运行在特权级3的位置// 进入任务0时,需要重设其数据段寄存器为特权级3的mov %ss, %axmov %ax, %dsmov %ax, %esjmp task_0			// 跳转到任务0运行

切换到进程0, 我们不能采用jmp直接跳过去, 这样改变不了特权级

假设我们是在特权级3下面运行这个task_0_entry,结果发生了中断,然后就会从特权级3的栈切换到特权级0的栈,并且特权级0栈里面保存特权级3发生中断时候的各种状态像SS,ESP等,然后进特权级0状态时候运行的中断处理程序

Snipaste_2024-12-13_22-21-56

当执行iret的时候,CPU会执行一些出栈的操作,将SS,ESP,EFLAGS等弹回到对应的寄存器中去(回到特权级3模式),那么我们关注一下这个EIP寄存器,我们可以将EIP寄存器的值设置为task0这个函数的地址,CS设置为task0代码段对应的寄存器,EFLAGS也可以对应的设置,ESP设置为task0当前的栈指针

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/63879.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

游戏如何应对模拟器作弊

模拟器是指能在PC端模拟出安卓手机系统的软件,市面上比较常见的安卓模拟器有:雷电模拟器、MuMu模拟器、夜神模拟器等。 市面上常见的模拟器 模拟器既可以节省手机内存空间,避免长时间玩游戏手机发烫发热的尴尬,也可以用键盘鼠标对…

我们来对接蓝凌OA --报文格式

题记 数智化办公专家、国家高新技术企业、知识管理国家标准制定者、信创供应商10强…等等,这些和咱们有关系吗!!不好意思,走错片场了,刚和项目经理在甲方那边吹牛B想想刚刚的大饼,看看支付宝余额&#xff…

GFPS扩展技术原理(一)消息流

消息流作用 Google fast pair service要求Provider提供一个额外得通道以便seeker寻求建立连接,连接建立后,Seeker就可以向Provider发送一串数据流,这样做的目的是为了支持GFPS Extension,也就是扩展的GFPS,主要涉及一…

海康萤石摄像机接入EasyNVR流程:开启RTSP-》萤石视频添加到EasyNVR-》未来支持海康SDK协议添加到EasyNVR

EasyNVR目前支持GB28181、RTSP、ONVIF、RTMP(推流)这几种协议接入,目前正在增加海康HIKSDK、大华DHSDK等几种SDK的接入,我们今天就介绍一下萤石摄像机怎么通过RTSP接入到EasyNVR。 第一步:萤石摄像机开启 萤石设备默…

【EthIf-03】 EthernetInterface软件栈的文件组织结构

上图为《AUTOSAR_SWS_EthernetInterface【v2.2.0 】》给出的EthernetInterface软件栈的文件组织结构,本文主要关注arccore代码中已存在的文件的功能和作用,不知道的小伙伴可以查看🔗EthIf的文件结构中的src和inc目录下的文件有哪些: 1. 文件结构 1.1 EthIf_Cbk.h 头文…

Docker 中使用 PHP 通过 Canal 同步 Mysql 数据到 ElasticSearch

一、Mysql 的安装和配置 1.使用 docker 安装 mysql,并且映射端口和 root 账号的密码 # 获取镜像 docker pull mysql:8.0.40-debian# 查看镜像是否下载成功 docker images# 运行msyql镜像 docker run -d -p 3388:3306 --name super-mysql -e MYSQL_ROOT_PASSWORD12…

【深度学习量化交易6】优化改造基于miniQMT的量化交易软件,已开放下载~(已完成数据下载、数据清洗、可视化模块)

我是Mr.看海,我在尝试用信号处理的知识积累和思考方式做量化交易,应用深度学习和AI实现 股票自动交易,目的是实现财务自由~ 目前我正在开发基于miniQMT的量化交易软件。 之前写到,目前我已经完成了数据下载、数据清洗和数据可视化…

Ubuntu18安装后基本配置操作

1. 关掉自动更新 不关掉自动更新,会将你的ubuntu系统更新到更高版本,一些配置就不能用了,所以要关掉自动更新。在“软件和更新”中将“自动检查更新”设置为从不。 2. ubuntu换国内源 参考链接换源 按照这个换源这个换源好使 ,…

Hadoop一课一得

Hadoop作为大数据时代的奠基技术之一,自问世以来就深刻改变了海量数据存储与处理的方式。本文将带您深入了解Hadoop,从其起源、核心架构、关键组件,到典型应用场景,并结合代码示例和图示,帮助您更好地掌握Hadoop的实战…

2024153读书笔记|《春烂漫:新平摄影作品选》——跳绳酷似人生路,起落平常,进退平常,莫惧征途万里长

2024153读书笔记|《春烂漫:新平摄影作品选》——跳绳酷似人生路,起落平常,进退平常,莫惧征途万里长 《春烂漫:新平摄影作品选》作者新平,2019.12.25年读完的小书,当时就觉得挺不错,今…

JAVA:建造者模式(Builder Pattern)的技术指南

1、简述 建造者模式(Builder Pattern)是一种创建型设计模式,它通过将对象的构造过程与表示分离,使得相同的构造过程可以创建不同的表示。建造者模式尤其适用于创建复杂对象的场景。 设计模式样例:https://gitee.com/lhdxhl/design-pattern-example.git 本文将详细介绍建…

GESP202412 四级【Recamán】题解(AC)

》》》点我查看「视频」详解》》》 [GESP202412 四级] Recamn 题目描述 小杨最近发现了有趣的 Recamn 数列,这个数列是这样生成的: 数列的第一项 a 1 a_1 a1​ 是 1 1 1;如果 a k − 1 − k a_{k-1}-k ak−1​−k 是正整数并且没有在数…

「数据结构详解·十五」树状数组

「数据结构详解一」树的初步「数据结构详解二」二叉树的初步「数据结构详解三」栈「数据结构详解四」队列「数据结构详解五」链表「数据结构详解六」哈希表「数据结构详解七」并查集的初步「数据结构详解八」带权并查集 & 扩展域并查集「数据结构详解九」图的初步「数据结构…

如何通过python实现一个web自动化测试框架?

一、首先你得知道什么是Selenium? Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分:Selenium IDE、Selenium WebDriver和Selenium Grid。 Selenium IDE&#…

[Rust开发]actix_web::middleware 中间件

actix_web::middleware 在 Actix Web 框架中扮演着重要的角色,它允许开发者在处理 HTTP 请求和响应的过程中插入自定义的逻辑。中间件可以在请求到达处理函数之前或响应返回给客户端之前执行,从而实现日志记录、身份验证、数据验证、错误处理等功能。 为…

opencv——图片矫正

图像矫正 图像矫正的原理是透视变换,下面来介绍一下透视变换的概念。 听名字有点熟,我们在图像旋转里接触过仿射变换,知道仿射变换是把一个二维坐标系转换到另一个二维坐标系的过程,转换过程坐标点的相对位置和属性不发生变换&a…

记录:ubuntu24.04源码安装nginx

一. 下载Nginx源码 两个地址二选一即可 Nginx官网Nginx官网 Github eg:nginx-1.27.3.tar.gz 下载到 ubuntu24.04 的 Downloads ,解压 cd Downloads tar -zxvf nginx-1.27.3.tar.gz二. 编译安装 Note: 编译最好用 root 权限, 使用下面命令…

CNCF云原生生态版图

CNCF云原生生态版图 概述什么是云原生生态版图如何使用生态版图 项目和产品(Projects and products)会员(Members)认证合作伙伴与提供商(Certified partners and providers)无服务(Serverless&a…

wsl2子系统ubuntu发行版位置迁移步骤

默认的wsl2发行版是安装在windos的c盘,占用空间较大,有迁移需求,也可以迁移到其他电脑; 查看现有发行版信息 运行以下命令查看现有的 WSL 发行版及其状态: wsl --list --verbose# 输出示例NAME STATE …

SpringBoot基于Redis+WebSocket 实现账号单设备登录.

引言 在现代应用中,一个账号在多个设备上的同时登录可能带来安全隐患。为了解决这个问题,许多应用实现了单设备登录,确保同一个用户只能在一个设备上登录。当用户在新的设备上登录时,旧设备会被强制下线。 本文将介绍如何使用 Spr…