zoukankan      html  css  js  c++  java
  • RING0到RING3

    前一篇文章里面,我们将了CPU保护模式中的几种特权RING0,RING1,RING2,RING3!操作系统通常运行在RING0,应用程序通常运行在RING3。

    CPU如何从RING0到RING3

    先看实现代码

    mov ax, SelectorTSS                             
    ltr ax ;                                                     
    
    push SelectorStack3
    push TopOfStack3   
    push SelectorCodeRing3  
    push 0
    
    retf

    每一个特权等级对应一个自己的堆栈, 

    RING0 –- ESP0,SS0

    RING1 –- ESP0,SS1

    RING2 –- ESP0,SS2

    CPU进行不同特权级别的跳转时,要改变堆栈!但是CPU只有一个SS和SP,要让跳转后能够恢复,就必须将每一个特权等级的堆栈信息都保存在内存中。保存各个特权堆栈的内存有一个专门的结构TSS,该结构的首地址应该被保存到CPU的任务寄存器(Task Register)。

    retf 相当于一下汇编
    
    pop ip
    pop cs
    pop sp
    pop ss

    执行完retf之后CPU的下一个执行的指令cs:ip 就成了 SelectorCodeRing3:0 实际上就表示执行RING3的代码段的第一条指令

  • 相关阅读:
    iOS -- @try
    javaScript学习
    iOS -- js与原生交互
    iOS -- WKWebView
    iOS -- UIWindow的使用
    iOS -- app生命周期中代理方法的应用场景
    iOS -- keyChain
    UISegmentedControl
    明天你好
    编程:是一门艺术(转)
  • 原文地址:https://www.cnblogs.com/pavkoo/p/3625511.html
Copyright © 2011-2022 走看看