吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4512|回复: 13
收起左侧

[系统底层] 保护模式笔记五 段权限检查

  [复制链接]
lyl610abc 发表于 2021-4-20 21:49

前言

所有保护模式索引链接:保护模式笔记一 保护模式介绍

先前学习了段描述符的结构,这次来补充段描述符结构中的DPL(特权等级)相关的内容

段权限检查

CPU权限分级

在补充段权限检查之前,要了解CPU的权限分级

image-20210420171048562

  • 处理器的段保护机制定义了RING0,RING1,RING2,RING3一共4个特权级别
  • 大多数现代操作系统将0级用于内核/可执行程序,将3级用于应用程序
  • 可用于级别n的任何资源也可用于级别0到n,因此特权级别是环
  • 当特权较低的进程尝试访问特权较高的进程时,将向操作系统报告常规保护错误异常
  • 8086中的实模式程序在级别0(最高特权级别)上执行,而8086中的虚拟模式在级别3执行所有程序
  • 多数现代x86内核仅使用两个特权级别,即RING0和RING3

RING0 RING1 RING2 RING3
通常用途 内核 特权代码、特权数据、特权栈 特权代码、特权数据、特权栈 应用程序
级别 最高 第二高 第三高 最低
对应层 内核层(内核态) 应用层(用户态)

内核层

在内核模式下,CPU可以执行其体系结构允许的任何操作。可以执行任何指令,启动任何I / O操作,访问任何内存区域,使用特权指令,控制中断、修改页表、访问设备等等

应用层

硬件会对CPU操作施加某些限制。通常,某些指令是不允许的(尤其是那些指令(包括I / O操作)可能会改变机器的全局状态),某些内存区域无法访问等。CPU的用户模式功能通常是这些指令的子集可以在内核模式下使用,但是在某些情况下,例如非本机体系结构的硬件仿真,它们可能与标准内核模式下的可用软件有显着差异


应用层切换内核层

应用程序的代码运行在最低运行级别上ring3上,不能做受限操作

如果要做受限操作,比如要访问磁盘,写文件,那就要通过执行系统调用(函数),执行系统调用的时候,CPU的运行级别会发生从ring3到ring0的切换,并跳转到系统调用对应的内核代码位置执行,这样内核就为你完成了设备访问,完成之后再从ring0返回ring3。这个过程也称作用户态和内核态的切换


CPU权限分级的作用

RING设计的初衷是将系统权限与程序分离出来,使之能够让OS更好的管理当前系统资源,也使得系统更加稳定

举个很常见的例子:

普通的应用程序崩溃一般是程序未响应或者停止运行,并不会影响系统的正常运行

但当驱动程序出现问题后,动辄 BSOD(蓝屏死机)


判断程序特权级别

了解了CPU的权限分级后,再来了解 如何查看程序处于几环

这涉及到了CPL(Current Privilege Level) :当前特权级别

CPL是段寄存器CS和SS段选择子的后两位

保护模式笔记三 段描述符和段选择子中已经说明了段选择子的结构

Index TI RPL
含义 索引 表指示器 请求特权等级
全称 Index Table Indicator Requested Privilege Level
数据宽度 13位 1位 2位

对比可知,当段寄存器为CS和SS时,其段选择子的RPL就是CPL


通过OD附加应用程序后查看其段寄存器:

image-20210420204434380


段寄存器 段选择子(Selector) 二进制段选择子 二进制RPL 十进制RPL
ES 23 0010 0011 11 3
CS 1B 0001 1011 11(CPL) 3(CPL)
SS 23 0010 0011 11(CPL) 3(CPL)
DS 23 0010 0011 11 3
FS 3B 0011 1011 11 3

根据CS和SS的段选择子可以得到CPL为3,印证了应用程序的CPU权限分级为RING3


EPL(有效特权级别)

上面提到了CPL(当前特权级别)和RPL(请求特权级别)

所谓的有效特权级别EPL(Effective Privilege Level),顾名思义就是最终的确定可否执行的特权

EPL = max(RPL,CPL)

即 EPL 等于 RPL和CPL的最大值,EPL为RPL和CPL中较低的权限


DPL(描述符特权级别)

关于DPL,在保护模式笔记四 段描述符结构中已经略微说明了,现在展开细说

DPL的作用

DPL存储在段描述符中,规定了访问该段所需要的特权级别是什么;即 如果想要加载某个段描述符,就必须具备对应的特权级别

DPL权限检查

当加载一个段描述符时,首先CPU要判断其P位(有效位),如果该段描述符有效,则继续进行DPL权限检查

所谓的DPL权限检查 就是 判断 DPL是否满足:EPL=max(RPL,CPL)<=DPL是否成立

只有当EPL<=DPL时,权限检查才通过,段描述符才能够被加载到段寄存器中

RPL CPL EPL DPL 权限检查是否通过
0 0 0 0
0 0 0 3
0 3 3 0 ×
0 3 3 3
3 0 3 0 ×
3 0 3 3
3 3 3 0 ×
3 3 3 3

总结

RPL CPL EPL DPL
含义 请求特权级别 当前特权级别 有效特权级别 描述符特权级别
说明 用什么权限去访问一个段 CPU当权的权限级别 max(RPL,CPL) 访问该段所需要的特权级别

免费评分

参与人数 8吾爱币 +8 热心值 +8 收起 理由
Ah.Dragon + 2 + 1 用心讨论,共获提升!
By阿清 + 1 + 1 我很赞同!
swhyy + 1 我很赞同!
debug_cat + 2 + 1 打call打call
laughingsir38 + 1 + 1 我很赞同!
游叶子明 + 1 + 1 谢谢@Thanks!
小菜鸟一枚 + 1 + 1 学习!
sam喵喵 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

aswcy815174418 发表于 2021-8-6 14:01
忆魂丶天雷 发表于 2021-4-20 22:31
大佬可以强调下版权问题 发现有人直接搬走了哦

习惯就好,现在网上就喜欢生搬硬套
A学习的小菜鸟 发表于 2021-8-16 16:54
所以说段的说明有时候会出现内核层面的段地址,如果要使用某些段的话,那么就要看看是不是在内核层使用的段吧
忆魂丶天雷 发表于 2021-4-20 22:31
大佬可以强调下版权问题 发现有人直接搬走了哦
gdf87521 发表于 2021-4-20 22:42
终于更新了,感谢
辉哥j 发表于 2021-4-21 00:36
持续关注中
PrincessSnow 发表于 2021-4-21 01:53
谢谢大佬 终于更新了
love514415 发表于 2021-4-21 09:36
学不动了
whngomj 发表于 2021-4-21 10:29
谢谢分享
swhyy 发表于 2021-4-21 13:17
学习了,支持楼主,给你评分
cn奔跑的子弹 发表于 2021-4-21 14:03
终于更新了
a282619133 发表于 2021-4-21 17:46
支持楼主,学习了,
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-22 10:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表