Ring3 和Ring0 解释

这得从CPU指令系统(用于控制CPU完成各种功能的命令)的特权级别说起。在CPU的所有指令中,有一些指令是非常危险的,如果错用,将导致整个系统崩溃。比如:清内存、设置时钟等。如果所有的程序都能使用这些指令,那么你的系统一天死机n回就不足为奇了。所以,CPU将指令分为特权指令和非特权指令,对于那些危险的指令,只允许操作系统及其相关模块使用,普通的应用程序只能使用那些不会造成灾难的指令。形象地说,特权指令就是那些儿童不宜的东东,而非特权指令则是老少皆宜。

Intel的CPU将特权级别分为4个级别:RING0,RING1,RING2,RING3。Windows只使用其中的两个级别RING0和RING3,RING0只给操作系统用,RING3谁都能用。如果普通应用程序企图执行RING0指令,则Windows会显示“非法指令”错误信息。

详细说明:

http://www.cnblogs.com/pcajax/archive/2011/03/16/1986407.html

时间: 2024-11-09 07:08:47

Ring3 和Ring0 解释的相关文章

RING3到RING0的函数跟踪

前两天面试,一位面试官老师提到了RING3到RING0的跟踪,自己以前是windbg跟踪过一次,想着再用OD跟踪一下 就在当复习一下,当时答面试官哥哥进R0是哪个函数的时候,竟然想不起来,只知道说是Ki开头的那个函数,真是汗颜,不珍惜机会啊 好好记住吧 OD加载咱们的notepad 下断点到CreateFileW,迷惑于是CreateFileW还是CreateFileA可以用PEID看一下,或者OD自己查找不过OD在这里不是太好用 然后OD运行(F9)到这里,看EIP很清晰就是该函数 继续往下调

RING0,RING1,RING2,RING3

Intel的CPU将特权级别分为4个级别:RING0,RING1,RING2,RING3.Windows只使用其中的两个级别RING0和RING3,RING0只给操作系统用,RING3谁都能用.如果普通应用程序企图执行RING0指令,则Windows会显示“非法指令”错误信息.  挑战: 大部分modern CPU 并不支持可虚拟化, 如x86 需直接访问内存和硬件的操作系统特权代码必须在Ring 0执行 CPU虚拟化必须在Guest OS下面添加VMM(Ring 0) 一些关键指令在非Ring

Ring3创建事件Ring0设置事件

应用程序中创建的事件和在内核中创建的事件对象,本质上是同一个东西,在用户模式中,他用句柄表示,在内核模式下,他用KEVENT表示数据结构表示.在应用程序中,所有的内核对象都不会被用户看到,用户看到的知识代表内核对象的对象句柄.这个代码就是要在Ring3与RIng0之间用一个事件对象.解决的第一个问题就是如何将Ring3创建的事件传递给驱动:使用DeviceIoControl,在Ring3中创建一个同步事件,然后用DeviceIoControl将事件句柄传递给驱动程序.需要指出的是句柄和进程是相关

ring0 与 ring3 层之间的交互

在进行Windows的ring0层开发时,必不可免的要与 ring3 层进行交互.进行数据间的相互传输.可用的方法有DeviceIoCntrol,ReadFile.我平常都是用的DeviceIoControl在ring3 与 ring0 层进行的数据传输.今天就写写DeviceIoControl 和 ring0通过事件通知 ring3! 首先加载驱动之后,在ring3层调用CreateFile() 打开ring0层生成的LinkName,获得设备对象的句柄.然后调用DeviceIoControl

全虚拟化和半虚拟化的区别 cpu的ring0~ring3又是什么概念?

ring0是指CPU的运行级别,ring0是最高级别,ring1次之,ring2更次之-- 拿Linux+x86来说, 操作系统(内核)的代码运行在最高运行级别ring0上,可以使用特权指令,控制中断.修改页表.访问设备等等. 应用程序的代码运行在最低运行级别上ring3上,不能做受控操作.如果要做,比如要访问磁盘,写文件,那就要通过执行系统调用(函数),执行系统调用的时候,CPU的运行级别会发生从ring3到ring0的切换,并跳转到系统调用对应的内核代码位置执行,这样内核就为你完成了设备访问

全虚拟化和半虚拟化的区别 cpu的ring0 ring1又是什么概念?

ring0是指CPU的运行级别,ring0是最高级别,ring1次之,ring2更次之…… 拿Linux+x86来说, 操作系统(内核)的代码运行在最高运行级别ring0上,可以使用特权指令,控制中断.修改页表.访问设备等等. 应用程序的代码运行在最低运行级别上ring3上,不能做受控操作.如果要做,比如要访问磁盘,写文件,那就要通过执行系统调用(函数),执行系统调用的时候,CPU的运行级别会发生从ring3到ring0的切换,并跳转到系统调用对应的内核代码位置执行,这样内核就为你完成了设备访问

win10系统调用架构分析

1.  操作系统模型 大多数操作系统中,都会把应用程序和内核代码分离运行在不同的模式下.内核模式访问系统数据和硬件,应用程序运行在没有特权的模式下(用户模式),只能使用有限的API,且不能直接访问硬件.当用户模式调用系统服务时,CPU执行一个特殊的指令以切换到内核模式(Ring0),当系统服务调用完成时,操作系统切换回用户模式(Ring3). Windows与大多数UNIX系统类似,驱动程序代码共享内核模式的内存空间,意味着任何系统组件或驱动程序都可能访问其他系统组件的数据.但是,Windows

系统调用学习笔记

开始学内核的时候,一定会讲从ring3到ring0的调用,但是网上很多的文章讲的模棱两可,这次记录下我对系统调用的研究........ 一个线程由用户态进入内核态的途径有3种典型的方式: 1.  主动通过int 2e(软中断自陷方式)或sysenter指令(快速系统调用方式)调用系统服务函数,主动进入内核 2.  发生异常,被迫进入内核 3.  发生硬件中断,被迫进入内核 现在的cpu调用api进入内核都是通过sysenter指令(AMD的处理器是syscall)进入到ring0,系统在启动的时

C语言面试题大汇总

C语言面试题大汇总 1.局部变量能否和全局变量重名? 答:能,局部会屏蔽全局.要用全局变量,需要使用"::" ;局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量.对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内. 2.如何引用一个已经定义过的全局变量? 答: extern 可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引