CPU进入内核,是什么意思?

news2024/11/18 11:30:44

知乎上有一个问题:

进入内核态究竟是什么意思?

暂且忘记这个问题,让我们从另一个问题出发,一步步引出这个问题的答案。

特权指令问题

现代计算机里面,同时运行了很多程序,比如Office软件、浏览器、QQ、还有你现在正在看这篇文章的微信,这些程序运行起来就是一个个的进程,每个进程都有各自的内存地址空间,为了防止大家越界,大打出手乱了规矩,得要有个管家来管理大家,这个管家就是操作系统

好了,不管是前面说的那些应用程序,还是操作系统,本质上都是CPU去执行的二进制程序指令吧,而一个CPU能够执行的所有指令都在它的指令集里面了。

试想一下,假如指令集中的所有指令都一视同仁,任何程序都可以使用这些指令,那会出现什么问题?

那操作系统的权威性如何保证?怎么管理这一堆进程,还不反了天了?因为谁都可以执行这些指令,大家都是平起平坐啊!

所以,必须将指令集中的一部分比较敏感的划出来,这部分只能让操作系统来执行,其他程序不能执行,以此来捍卫操作系统的地位!

哪些指令比较敏感?

涉及到操作系统管理计算机资源的指令就是敏感指令。

以x86架构的CPU为例,中断的打开与关闭、外部设备的输入与输出、进程地址空间基地址CR3寄存器的修改、中断描述符表IDT基地址寄存器的修改、全局描述符表GDT基地址寄存器的修改···这些都是敏感操作,是普通应用程序绝对不能碰的指令:

cli   sti   in   out   lidt   lgdt   ···   

那如何做到让这些敏感指令操作系统能够执行,而普通程序又不能执行呢?

CPU在执行指令的时候又没办法区分这条指令是应用程序的还是操作系统的,它只是一个没有感情的执行机器,只会闷头执行···

为了解决这个问题,x86 CPU搞了个特权级出来,或者说是CPU提供了四个工作模式,从Ring0-Ring3,每一个模式又称为一个环,一共四个环。0环是最高权限模式,可以执行所有指令。Ring3是最低权限模式,只能执行指令集中的一部分指令。

也就是说,CPU搞了四个工作模式出来,只有工作在Ring0模式下,才能执行上面的那些特权指令,在其他模式下如果要去执行那些指令,CPU就会抛出异常!

有了CPU的这一硬件技术支持,问题就好办了,我们可以让CPU在执行操作系统代码的时候运行在Ring0模式,在执行普通应用程序代码的时候运行在Ring3模式,这样就解决了特权指令的问题。

内核地址空间

但这里又回到之前那个问题了:CPU如何知道现在执行的代码是不是操作系统的呢?

一个最容易想到的解决办法就是:把操作系统的代码放在内存中一个特殊的区域,当CPU执行的指令地址来自这个区域时,就切换工作模式到Ring0,离开这个区域后,就切换到其他模式。

光这样还不够,还得加一个措施:这个区域不能让应用程序来访问,否则谁都能来读写,那还了得?

所以,除了指令增加特权级以外,在内存的访问上,也得加上特权级。

x86架构的CPU是基于分段式+分页式相结合的内存管理方式,所以Intel倒腾了几下,给不同的内存段限定了不同的访问模式,并把它记录到了段的描述符中。

在访问内存的时候,CPU就会拿当前段寄存器中标示的权限和要访问的目标内存所在段段访问权限进行对比,符合要求才能访问,否则也会抛出异常!

上面这一部分有一些抽象了,简单来说,操作系统在内存中圈了一块地,把自己的代码放在这块地中,并设置了访问权限:闲人免进,非Ring0权限禁止入内。

随后,操作系统又把自己圈的这块地映射到了每一个进程的虚拟地址空间中,这样一来,所有进程抬头一看自己的进程地址空间,都会看到它了:好家伙,这一块区域被操作系统占了,咱也不敢写,咱也不敢看。

操作系统圈的这块地,就是内核地址空间!一般位于进程地址空间中较高的区域,以32位下Windows为例,它是在0x80000000~0xFFFFFFFF这个区域。

我们把位于这个空间中的代码叫做操作系统的内核代码,有时候也简称内核。而把应用程序代码所活动的区域叫做用户地址空间

进一步,我们常把CPU执行内核代码的模式称为内核态,把执行用户程序时的模式称为用户态

CPU执行代码的过程,就是不断游走于用户态和内核态的过程。

进入和离开

现在还有最后一个问题:内核态的进入和离开怎么实现?

假如没有任何约束,那普通应用程序,不是随便执行一条jmp指令就能跳进内核地址空间执行了?

应用程序可以随便进进出出,高兴了就来一个内核一日游,那还不天下大乱了?

况且话说回来,内核所在的内存空间因为权限保护,应用程序也是没办法jmp过去的,前面不说了吗:闲人免进!

那怎么办呢?

CPU提供了专门的入口,用来从用户态进入内核态。

这几个入口是:

1、中断:

当硬件设备有消息来了之后,会通过中断通知CPU,比如你移动了鼠标,敲下了键盘,收到了一个数据包,收到了时钟的滴答声···

当中断发生时,CPU会将当前执行的上下文保存到栈中,转入内核执行中断处理程序。

通过中断进入内核,入口是记录在中断描述符表IDT中的,由操作系统在系统启动的时候就安排好了。

2、异常:

当CPU执行过程中发现一些异常情况,比如执行除法指令的除数是0,访问的内存地址无效,或者访问的内存地址属于特权页面等这些情况,CPU都会触发异常。

异常和中断的流程有一些类似,遇到异常时,CPU也会将执行的上下文保存在栈中,转入内核执行中断处理程序。

通过异常进入内核的入口和中断一样,也是记录在IDT中的,同样是操作系统在系统启动的时候就安排好了。

3、系统调用:

在系统编程中,我们经常会调用很多操作系统提供的API函数,比如文件操作、内存操作、网络操作等等,这些函数都是操作系统封装出来的应用程序编程API,只是一个接口,真正的底层实现是位于内核中的系统调用函数。

应用层上的API通过CPU专门的指令(如sysenter/syscall)进入内核来完成对应的功能,进入内核后的入口同样也是操作系统提前安排好了的。

总结

最后,让我们回答最开始知乎的那个问题:进入内核态究竟是什么意思?

CPU为了进行权限管控,引入了特权级的概念,CPU工作在不同的特权级下能够执行的指令和能够访问的内存区域是不一样的。

计算机在启动之初,CPU运行在高特权级下,操作系统率先获得了执行权限,在内存中圈了一块地,将自己的程序代码放了进去,并设定了这一部分内存只有高特权级才能访问。

随后,操作系统在创建进程的时候,都会把自己所在的这块内存区域映射到每一个进程地址空间中,这样所有进程都能看到自己的进程空间中,有一块叫“内核”的区域,这一块区域是无法擅入的。

所谓的“进入内核态”是指:当中断、异常、系统调用等情况发生的时候,CPU切换工作模式到高特权级模式Ring0,并转而执行位于内核地址空间处的代码。

看完这篇,你明白进入内核态是怎么一回事了吗?

看不懂没关系,下面用一张图来总结一下:

怎么样,这下懂了吧?

②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)

恭喜你,如果学到这里,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web 渗透、安全服务、安全分析等岗位;如果等保模块学的好,还可以从事等保工程师。薪资区间6k-15k

到此为止,大概1个月的时间。你已经成为了一名“脚本小子”。那么你还想往下探索吗?

7、脚本编程(初级/中级/高级)

在网络安全领域。是否具备编程能力是“脚本小子”和真正黑客的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力.

零基础入门,建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习; 搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP, IDE强烈推荐Sublime; ·Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,不要看完; ·用Python编写漏洞的exp,然后写一个简单的网络爬虫; ·PHP基本语法学习并书写一个简单的博客系统; 熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选); ·了解Bootstrap的布局或者CSS。

8、超级网工

这部分内容对零基础的同学来说还比较遥远,就不展开细说了,贴一个大概的路线。感兴趣的童鞋可以研究一下,不懂得地方可以加我耗油,跟我学习交流一下。

网络安全工程师企业级学习路线

如图片过大被平台压缩导致看不清的话,可以加我耗油发给你,大家也可以一起学习交流一下。

一些我自己买的、其他平台白嫖不到的视频教程:

需要的话可以扫描下方卡片加我耗油发给你(都是无偿分享的),大家也可以一起学习交流一下。

结语

网络安全产业就像一个江湖,各色人等聚集。相对于欧美国家基础扎实(懂加密、会防护、能挖洞、擅工程)的众多名门正派,我国的人才更多的属于旁门左道(很多白帽子可能会不服气),因此在未来的人才培养和建设上,需要调整结构,鼓励更多的人去做“正向”的、结合“业务”与“数据”、“自动化”的“体系、建设”,才能解人才之渴,真正的为社会全面互联网化提供安全保障。

特别声明:

此教程为纯技术分享!本书的目的决不是为那些怀有不良动机的人提供及技术支持!也不承担因为技术被滥用所产生的连带责任!本书的目的在于最大限度地唤醒大家对网络安全的重视,并采取相应的安全措施,从而减少由网络安全而带来的经济损失!!!

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

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

相关文章

好书推荐|MATLAB科技绘图与数据分析

提升你的数据洞察力,用于精确绘图和分析的高级MATLAB技术 MATLAB科技绘图与数据分析——jd 本书内容 《MATLAB科技绘图与数据分析》结合作者多年的数据分析与科研绘图经验,详细讲解MATLAB在科技图表制作与数据分析中的使用方法与技巧。全书分为3部分&a…

Jetbrains插件AI Assistant,终于用上了

ai assistant激活成功后,如图 ai assistant获取:https://web.52shizhan.cn/activity/ai-assistant 主要功能如下

springboot集成达梦数据库8

springboot集成达梦数据库8 官方文档&#xff1a;[https://eco.dameng.com/document/dm/zh-cn/start/java-development.html](https://eco.dameng.com/document/dm/zh-cn/start/java-development.html) 引入maven依赖 <!--添加数据库驱动安装包--> <dependency> …

基于Matlab卷积神经网络(CNN)人脸识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 人脸识别技术作为计算机视觉领域的一个重要分支&#xff0c;已经广泛应用于安全监控、身份验证…

提供一个c# winform的多语言框架源码,采用json格式作为语言包,使用简单易于管理加载且不卡UI,支持“语言分级”管理

提供一个c# winform的多语言框架源码&#xff0c;采用json格式作为语言包&#xff0c;不使用resx资源&#xff0c;当然本质一样的&#xff0c;你也可以改为resx 一、先看下测试界面 演示了基本的功能&#xff1a;切换语言&#xff0c;如何加载语言&#xff0c;如何分级加载语…

Debezium+Kafka:Oracle 11g 数据实时同步至 DolphinDB 解决方案

随着越来越多用户使用 DolphinDB&#xff0c;各式各样的应用场景对 DolphinDB 的数据接入提出了不同的要求。部分用户需要将 Oracle 11g 的数据实时同步到 DolphinDB 中来&#xff0c;以满足在 DolphinDB 中实时使用数据的需求。本篇教程将介绍使用 Debezium 来实时捕获和发布 …

网络层协议——IP协议

1. 网络层 在学习TCP时&#xff0c;我们学习了TCP保证的是能将一个数据可靠的传输到另一个主机上。主要是数据的可靠传输。而网络层和数据链路层则是帮助我们如何将数据传输到另一台主机上。 我们在应用层给对方发数据时&#xff0c;数据并不是直接传输给对方的&#xff0c;而…

如何应对EI会议中的突发情况?

在参加EI会议时&#xff0c;难免会遇到一些突发情况&#xff0c;以下是几种常见的突发情况及应对策略&#xff1a; 突发情况及应对策略 1. 技术故障 投影设备故障&#xff1a;提前将演示文稿上传到会议主办方指定的平台&#xff0c;或带上多个版本&#xff08;如USB驱动器和云…

网络采集受限?如何解决指纹识别、IP封禁、验证码、账号多登等问题

网页采集是什么 网页采集&#xff0c;也常被称作网络采集、网络数据抓取&#xff0c;是一种通过自动化工具从网站上获取信息的技术。这些技术通过访问网页&#xff0c;解析页面上的内容&#xff0c;并提取出有价值的数据&#xff0c;如文本、图片、链接等。 网页采集通常用于…

大学计算机专业必看:大学编程相关的比赛或者证书,真正有用的是哪些?

前言 大学期间&#xff0c;会有各种各样的编程赛事&#xff0c;但是你知道真正对自己未来就业有帮助的比赛证书有帮助的是哪些吗&#xff1f; 有些小伙伴来面试时&#xff0c;会咔咔亮出一大堆的证&#xff0c;看起来挺唬人。 但真的有含金量吗&#xff1f;真的能为你的简历增…

A2B V2.0协议学习笔记(非正式版本)

一、说明 A2B全称是 Automotive Audio Bus 汽车音频总线,主要是解决传统音频总线线多、线重、成本贵等问题。 A2B V2.0总线相对V1.0主要变化点: 速率提升,高达98.304Mbps,全双工模式 编码方式,由之前的曼彻斯特编码变为QPSK(正交相移键控)编码,每个符合2bit数据,因此…

计算机网络之应用层知识点总结

6.1 网络应用模型 &#xff08;1&#xff09;应用层概述 &#xff08;2&#xff09;网络应用模型的介绍 客户/服务器&#xff08;C/S&#xff09;模型 P2P模型 6.2 域名解析系统DNS &#xff08;1&#xff09;DNS系统介绍 &#xff08;2&#xff09;域名 &#xff08;3&#…

Java时间工具类(Date和LocalDateTime)

Date package com.qiangesoft.utils.date;import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date;/*** 日期工具类** author lq* date 2024-05-23*/ public class DateUtil {public static final String[] C…

同一个类中方法调用,导致@Transactional失效

1.背景 查了一下Spring文档&#xff0c;就是上面这段话所说的情况。 2.Spring官方文档有这么一段话 https://docs.spring.io/spring-framework/docs/current/reference/html/data-access.html#transaction-declarative In proxy mode (which is the default), only external …

Docker save load 镜像 docker手动上传导入镜像

docker手动上传导入镜像 因为一些服务器网络限制&#xff0c;导致拉取某些镜像的时候非常慢&#xff0c;可以使用手动的方式导入镜像 1、将镜像归档为tar文件 如果一台服务器里已经存在某个镜像&#xff0c;可以通过docker save 命令 把镜像打成tar包 docker save 命令用于将…

【Vue】Vue2使用ElementUI

目录 Element UI介绍特点Vue2使用Element安装引入ElementUI组件库 使用ElementUI用户注册列表展示其他 mint-ui介绍特点安装组件引入组件Mint-ui相关组件 Element UI 介绍 官网(基于 Vue 2.x ):https://element.eleme.cn/#/zh-CN ElementUI 是一个基于 Vue.js 的桌面端组件库…

K8S认证|CKA题库+答案| 11. 创建PVC

11、创建PVC 您必须在以下Cluster/Node上完成此考题&#xff1a; Cluster Master node Worker node ok8s master …

【加密与解密(第四版)】第二十二章笔记

第二十二章 补丁技术 补丁&#xff1a;文件补丁&#xff08;修改文件本身的某个数据&#xff09;和内存补丁&#xff08;对正在运行的程序的数据进行修改&#xff0c;以达到某种效果&#xff09; 22.1 文件补丁 文件补丁直接修改可执行文件或某功能模块的二进制代码。 22.2 内…

GPTS 精选:突破效率瓶颈,轻松领先一步别人下班

文章目录 优秀的GPTS推荐数据分析图像设计各种图表/流程图/序列图/思维导图联网搜索数学建模编程专属助手Python助手万能代码助手&#xff08;Copilot&#xff09;论文降重&#xff08;重述/降重&#xff09;文献搜索&#xff08;Scholar AI&#xff0c;Scholar GPT&#xff09…

ssm/springoot养老院问诊服务预约系统_96316老年人服务系统

2.管理员&#xff1a; &#xff08;1&#xff09;登入注册页面&#xff1a;管理员进行操作时需要是已注册登入的 &#xff08;2&#xff09;权限管理&#xff1a;管理员登入后可以运用权限进行相应的操作管理。 &#xff08;3&#xff09;用户管理&#xff1a;对用户进行删除、…