自己动手写操作系统 降入ring3特权级
来源:互联网 发布:c语言怎么ab之间求素数 编辑:程序博客网 时间:2024/06/16 05:56
;进入ring3
push SelectorStack3
push TopOfStack3
push SelectorCodeRing3
push 0
push SelectorStack3
push TopOfStack3
push SelectorCodeRing3
push 0
retf
JMP、CALL和RET指令的近转移形式只是在当前代码段中执行程序控制转移,因此不会执行特权级检查。JMP、CALL或RET指令的远转移形式会把控制转移到另外一个代码段中,因此处理器一定会执行特权级检查。
1、jmp指令紧紧进行执行流程的跳转,不会保存返回地址
2、call指令在进行流程跳转前会保存返回地址,以便在跳转目标代码中可以使用ret指令返回到call指令的下一条指令处继续执行。执行段内跳转时,只保存EIP;如果是段间跳转,还保存CS。
3、ret和retf:这两个指令的功能都是调用返回。
(1)ret在返回时只从堆栈中取得EIP;retf中的字母f表示far,即段间转移返回,要从堆栈中取出EIP和CS。
(2)两个指令都可以带参数,表示发生过程调用时参数的个数,返回时要从堆栈中退出相应个数的参数。
(3)恢复CS时,如果发现将发生特权级变化(当前CS的低2位不等于从堆栈中取得的新的CS值的低2位。由跳转的相关理论可知,只有跳转到非一致代码段时才会发生特权级变化,那么,也只有从非一致代码段返回时才会发生特权级变化的返回),则还要从调用者堆栈中取得ESP和SS恢复到相应寄存器中,也即恢复调用者堆栈。
补充:
iretf:iref 弹出 3个参数,一个给 ip,一个 给 cs ,一个 个 flag标志位
0 0
- 自己动手写操作系统 降入ring3特权级
- 专注于操作系统17之进入ring3特权级
- 特权级--ring0到ring3
- 特权级--ring3到ring0
- 特权级--ring0到ring3
- 特权级--ring3到ring0
- 特权级--ring0到ring3
- 《自己动手写操作系统》第三章 pmtest4源码解析——利用门调用实现特权级转移
- 《自己动手写操作系统》第三章 pmtest5源码解析——特权级变换与堆栈切换实例详解
- 《Orange’s 一个操作系统的实现》3.保护模式7-特权级转移(通过调用门转移目标段-有特权级转换-进入ring3)
- 《Orange’s 一个操作系统的实现》3.保护模式7-特权级转移(通过调用门转移目标段-有特权级转换-进入ring3-b)
- 自己动手写操作系统
- [转载]自己动手写操作系统
- 自己动手写操作系统(一)
- 自己动手写操作系统(二)
- 自己动手写操作系统(一)
- 《自己动手写操作系统》读书笔记
- 自己动手写操作系统(一)
- 【iOS知识学习】_协议(delegate)和类别(category)
- CodeForces 407A Triangle
- C++ Primer Plus学习笔记之const修饰指针
- 变为回文串
- angularjs的事件 $broadcast and $emit and $on
- 自己动手写操作系统 降入ring3特权级
- day01_Servlet_ServletContext_ServletConfig
- E 字符串= =
- C/C++ string库(string.h)提供了几个字符串查找函数
- hibernate tools自动生成entity代码
- PHP-CGI 进程 CPU 100% 与 file_get_contents 函数的关系
- 如果阿斯,请深爱
- 装载JDBC驱动,连接Mysql数据库(增,删,改,查)
- POJ 2718 Smallest Difference 枚举