Kernel Mode, User Mode
之前关于kernel mode,user mode之间的切换,有个问题一直有些疑惑。
一个进程有没有办法,从user mode切换到kernel mode去执行自己的代码。我知道答案肯定是不行,但是为啥不行,一直不太清楚。
今天看了点东西,算是有了解答。
首先,cpu有ring0,ring1,ring2,ring3这4个级别,windows只用了ring0,ring3,其实kernel mode = ring0, user mode=ring3.
Ring3下有些指令是不能执行的,如:lgdt,lldt,ltr...
系统有维护一张GDT的table(call gate,调用门),user mode想切换到kernel mode需要调用call,jmp指向一个远指针, 指向的code必须在GDT的table里才可以。
而Table的内容存放在一块memory里,只有Ring0才能访问,除非有漏洞,否则,user mode的代码是没办法进入Ring0去为所欲为的。
有一个漏洞,让Ring3有机会去修改GDT,Ring3可以执行sgdt拿到GDT的虚拟地址,根据Mapping关系,算出物理地址,open Device\PhysicalMemory,去修改这块物理地址。
修改GDT,添加自己的call gate。
Kernel Mode, User Mode的更多相关文章
- Linux 内核概述 - Linux Kernel
Linux 内核学习笔记整理. Unix unix 已有40历史,但计算机科学家仍认为其是现存操作系统中最大和最优秀的系统,它已成为一种传奇的存在,历经时间的考验却依然声名不坠. 1973 年,在用 ...
- 04.ubuntu下kvm 命令行安装64位ubuntu报"Couldn't find hvm kernel for Ubuntu tree."的问题
1.安装ubuntu时使用的virt-install的配置: virt-install \ --name test4 \ --ram 1024 \ --disk path=/data/01_ubunt ...
- 在 kernel 下打 log。 怪異現象與解決方式。
code battery_log(BAT_LOG_CRTI, "y t: %d \n", (int)my_timer_timeout); battery_log(BAT_LOG_C ...
- 机器学习——支持向量机(SVM)之核函数(kernel)
对于线性不可分的数据集,可以利用核函数(kernel)将数据转换成易于分类器理解的形式. 如下图,如果在x轴和y轴构成的坐标系中插入直线进行分类的话, 不能得到理想的结果,或许我们可以对圆中的数据进行 ...
- User space 与 Kernel space
学习 Linux 时,经常可以看到两个词:User space(用户空间)和 Kernel space(内核空间). 简单说,Kernel space 是 Linux 内核的运行空间,User spa ...
- kernel 4.4.12 外部模块Makefile 脚本编写
kernel 4.4.12 最简单module的编译 上一篇博客上面有一个最简单的模块源代码,今天就上一个Makefile,运行make 就可以编译一个外部的模块. vim Makefile 这个是我 ...
- kernel 4.4.12 EETI eGTouch 电容屏驱动移植
kernel 4.4.12 EETI eGTouch 电容屏驱动移植: 在make menuconfig 里面添加如下选项: 添加通过事件上报接口节点: Device Drivers ---> ...
- AM335x kernel 4.4.12 i2c eeprom AT24c02驱动移植
kernel 4.4.12 i2c eeprom AT24c02驱动移植 在kernel make menuconfig ARCH=ARM 中打开: Device Drivers ---> Mi ...
- Linux kernel make 常用选项介绍
Linux kernel 编译方法大全记录 一.这是一个我自己写的自动make脚本: #!/bin/sh export ARCH=arm export CROSS_COMPILE=arm-linux- ...
- Linux kernel 文件夹说明
Linux 内核代码的目录结构 arch: 包含和硬件体系相关的的代码,每种硬件平台占一个相应的目录,如i386,arm, arm64, powerpc,mips等. block: 块设备驱动程序I/ ...
随机推荐
- JS小数运算失精度的问题
JS因为是解释性语言,在运算中会有丢失精度的问题,这种现象多出现在浮点型运算的情况下. 例如 5.11 * 100 得到的结果是 511.00000000000006 这种情况尤其是在处理金额的时候 ...
- 一个好用的C# HttpCookieHelper.cs类
using System; using System.Collections.Generic; using System.Text; using System.Text.RegularExpressi ...
- MAC和windows开发操作系统环境,解决Maven工程中报 Missing artifact jdk.tools:jdk.tools
同事使用的是苹果mac,而我们其他人的开发环境是windows jdk1.8 导致同事从git上pull下来的工程,pom文件是直接报错的, windows下的pom文件设置是这样的: <dep ...
- Linux基础(02)、MTPutty安装和使用
准备工具 1. MTPutty的安装包 2. Putty.exe程序 作用:远程连接操作Centos 安装MTPutty 1.根据提示,一直下一步至下图:选择putty.exe文件的位置即可. 2.选 ...
- java泛型<? extends E> 有上限通配符与<? Super E>有上限通配符
通配符?,?表示占位,表明将来使用的时候在指明类型 <?>无限定的通配符, 是让泛型能够接受未知类型的数据 <? extends E> 有上限通配符,能够接受指定类及其子类类型 ...
- Python3 函数return
# def logger(): # f = open("loge.txt","a") # f.write("2017-09-15 exec funct ...
- (数据科学学习手札13)K-medoids聚类算法原理简介&Python与R的实现
前几篇我们较为详细地介绍了K-means聚类法的实现方法和具体实战,这种方法虽然快速高效,是大规模数据聚类分析中首选的方法,但是它也有一些短板,比如在数据集中有脏数据时,由于其对每一个类的准则函数为平 ...
- 【EXCEL】SUMIFS(複数の条件を指定して数値を合計する)
分享:
- OBS源码编译开发
本文来自网易云社区 作者:梁敏 OBS简介 OBS(Open Broadcaster Software)是免费开源的视频录制和直播软件,支持运行在windows,Mac和linux平台.官方链接 ht ...
- 如何从海量IP中提取访问最多的10个IP
算法思想:分而治之+Hash 1.IP地址最多有2^32=4G种取值情况,所以不能完全加载到内存中处理: 2.可以考虑采用分而治之的思想,按照IP地址的Hash(IP) % 1024的值,把海量IP日 ...