0 引言

本文是在linux系统编程中所沉淀。主要从代码层面出发,直觉感受CPU特权级别的作用,然后初步讲解CPU特权级别的概念。

1 反汇编代码

本部分从两个代码示例出发。

反汇编代码访问RAX寄存器的内容,其代码示例如下

#include <iostream>
#include <cstdlib>
#include <cstdint>int64_t get_rcx() {asm volatile("push %rcx\n\t""movq $10, %rcx\n\t""movq %rcx, %rax\n\t");asm volatile("pop %rcx");
}int main() {std::cout << "Hello, inline assembly: [RCX] = " << get_rcx() << "\n";return 0;
}

上述输出结果为

Hello, inline assembly: [RCX] = 10

反汇编访问CR0控制寄存器,其代码如下

int64_t get_cr0() {asm volatile ("movq %cr0, %rax");
}int main() {std::cout << "Hello, inline assembly: [CR0] = " << get_cr0() << "\n";return 0;
}

其输出结果如下

Segmentation fault (core dumped)

那么,为什么应用程序访问cr0控制寄存器会coredump呢?

2 CPU特权级

出于操作系统及其控制的硬件资源的安全性、稳健性和正确性等原因,所有现代 CPU 都包含特权级别的概念。

现代 CPU 将支持至少两个特权级别或模式,通常由如下两部分构成:

  • 特权(Supervisor)
  • 用户

代码(即机器指令)在 CPU 上以给定的特权级别或模式运行。 设计和实现操作系统的人可以自由地利用处理器特权级别。 这正是现代操作系统的设计方式。 下表总结了通用 CPU 特权级别

权限级别或模式名称

特权级别

 目的

术语

特权

内核代码跑在此层

内核空间

用户

用户代码跑在此层

用户空间

下面以x86架构讲解CPU的特权级别(ring), 英特尔处理器支持四种特权层级,分别为

  • ring0
  • ring1
  • ring2
  • ring3

上图箭头方向 特权级别逐渐升高 ,ring0特权级别最高,内核代码运行在此;ring3特权级别最低,应用程序在此。

为了进一步理解CPU特权级别,需要明白当前特权级别的概念,也即CPL。

当前特权级别 (CPL) :处理器当前执行代码的特权级别。

譬如,在一个处理器上有如下两条指令

  • 机器指令a有特权级别(Ring0)
  • 机器指令b有用户特权级别(Ring3)

因此,对于执行这些机器指令的正在运行的应用程序,会出现下表所示现象

机器指令

允许特权

CPL

是否work

a

特权(0)

0

3

b

用户(3)

0

3

故可知,高特权级可以使用低特权层级,而低特权层级无法运行高特权层级的指令。

故在第一部分会出现CR0寄存器时,出现coredump。

4 总结

本文针对cpu特权层级进行了初步讲解,通过本文可以初步明白cpu特权级别(内核态,用户态)相关概念。

初步探索CPU特权级别相关推荐

  1. Intel X86 CPU之特权级别

    Intel的X86处理器具有四个特权级别,分别是RING0.RING1.RING2.RING3,RING0层拥有最高权限,依此向下RING3层即拥有最低的权限. 应用程序工作在RING3层,就只能访问 ...

  2. 电子游戏理论基础知识的初步探索(转)

    电子游戏理论基础知识的初步探索(转)[@more@] 抛砖引玉,请读者指正. 一.游戏(Game) 约翰?赫伊津哈和弗里德里?希格奥尔格?容格尔在<游戏的人>(1938年)和<玩游戏 ...

  3. Cortex-M3的工作模式和特权级别

    文章目录 1 Cortex-M3的工作模式和特权级别 1.1 工作模式和权限级别分类 1.2 特权级别的切换 1 Cortex-M3的工作模式和特权级别 1.1 工作模式和权限级别分类 处理器的工作模 ...

  4. python socket发送数组_利用pyprocessing初步探索数组排序算法可视化

    [经过两次更新,功能基本完成]最终效果请直接下拉到最后一个视频观看 背景说明 这篇文章旨在初步探索利用pyprocessing的强大的可视化功能,以及pyprocessing和Ipython之间的本地 ...

  5. Cortex-M3操作模式和特权级别

    Cortex-M3支持两种操作模式,还支持两种特权级别: 两种模式为handler模式和线程(thread)模式,这两种模式是为了区别正在执行代码的类型:handler模式为异常处理例程的代码:线 ...

  6. 带你探索CPU调度的奥秘

    摘要:本文将会从最基础的调度算法说起,逐个分析各种主流调度算法的原理,带大家一起探索CPU调度的奥秘. 本文分享自华为云社区<探索CPU的调度原理>,作者:元闰子. 前言 软件工程师们总习 ...

  7. Alibaba Druid 源码阅读(二) 数据库连接池实现初步探索

    Alibaba Druid 源码阅读(二) 数据库连接池实现初步探索 简介 在上篇文章中,了解了连接池的应用场景和本地运行了示例,本篇文章中,我们尝试来探索下Alibaba Druid数据库连接池的整 ...

  8. Redis主从复制架构初步探索 http://www.sxt.cn/info-1750-u-324.html#SXT_h2_11

    Redis主从复制架构初步探索 目录http://www.sxt.cn/info-1750-u-324.html#SXT_h2_11 ·  一.主从复制架构简介 ·  1.1 源于关系数据库的读写分离 ...

  9. 企查查app sign算法破解初步探索

    企查查app sign算法破解初步探索 之前有说过企查查的sign的解密,但这次是企查查app的sign算法破解,目前是初步进程. 目前我们需要做查壳,具体方法可以百度搜索,企查查用的360加固,很简 ...

最新文章

  1. 2017-2-23 C#基础 中间变量
  2. 使用Golang flag包解析字符串
  3. 刘歧:FFmpeg Filter深度应用
  4. 关于如何在BCB中使用CodeGuard
  5. golang 操作日期_使用Godate在Golang中轻松进行日期操作
  6. 2019年5月,国际计量单位实施新定义
  7. pywin32库 : Python 操作 windows 系统 API
  8. HTC全景视频,2D 3D视频播放器下载教程
  9. JDK9的32位版本下载
  10. Vue Error-报错信息:Syntax Error: Assigning to rvalue.
  11. route add命令详解
  12. Excel在统计分析中的应用—第十二章—回归分析与预测-应用LINEST函数进行回归分析
  13. 大数据在金融行业的应用——银行大数据
  14. 国际网页短信系统平台搭建后台功能篇|移讯云短信系统
  15. (渐进)复杂度分析(上)
  16. 定时执行命令crontab的使用
  17. ip-guard产品功能介绍
  18. 从GPT到chatGPT(二):GPT2
  19. Python_格式化字符串
  20. [曾贤志]excel 2013基础精讲-曾贤志-专题视频课程

热门文章

  1. 多种虚拟机环境下安装Oracle11g RAC
  2. python通过手机给电脑发送消息_教你如何使用Python向手机发送通知
  3. 怦然心栋-冲刺日志(第3天)
  4. 墨墨背单词mysql_[英语] 何凯文考研英语第271句
  5. 关注|「中国智造」大象机器人Marscat走出国门,引领中国现代机器人风潮
  6. ubuntu20.04 nat模式
  7. .net工程师也看javaeye
  8. 「尚硅谷与腾讯云官方合作」硅谷课堂项目视频发布
  9. USACO 木瓜的丛林
  10. 程序员如何写好技术简历