当前位置: 首页 > 编程笔记 >

Intel x86 Assembly& Microarchitecture 切换到保护模式

史默
2023-03-14
本文向大家介绍Intel x86 Assembly& Microarchitecture 切换到保护模式,包括了Intel x86 Assembly& Microarchitecture 切换到保护模式的使用技巧和注意事项,需要的朋友参考一下

示例

切换到保护模式很容易:您只需要在控制寄存器中设置一位即可。但是,如果要保持保护模式,而又不知道下一步该怎么做,CPU不会举手并重置自身,则需要进行大量准备工作。

简而言之,所需步骤如下:

  • 需要为全局描述符表设置一个内存区域,以定义至少三个描述符:

    1. 零度,NULL描述符;

    2. 代码段的另一个描述符;

    3. 数据段的另一个描述符。

      这可以用于数据和堆栈。

  • 全局描述符表寄存器(GDTR)需要初始化,以指向该定义的内存区域。

     GDT_Ptr    dw      SIZE GDT
               dd      OFFSET GDT
               ...
               lgdt    [GDT_Ptr]
  • 需要设置的PM位CR0:

         mov   eax, cr0      ; Get CR0 into register
        or    eax, 0x01     ; Set the Protected Mode bit
        mov   cr0, eax      ; We're now in Protected Mode!
  • 需要从GDT加载段寄存器以删除当前的实模式值:

         jmp   0x0008:NowInPM  ; This is a FAR Jump. 0x0008 is the Code Descriptor
    NowInPM:
        mov   ax, 0x0010      ; This is the Data Descriptor
        mov   ds, ax
        mov   es, ax
        mov   ss, ax
        mov   sp, 0x0000      ; Top of stack!

请注意,这是最小,只是为了让CPU进入保护模式。要实际准备好整个系统可能需要更多步骤。例如:

  • 可能需要启用较高的存储区-关闭A20门;

  • 绝对应该禁用该中断-但也许可以在进入保护模式之前设置各种故障处理程序,以允许在处理的早期就出现错误。

本部分的原始作者撰写了有关进入保护模式并使用它的完整教程。

 类似资料:
  • 本文向大家介绍Intel x86 Assembly& Microarchitecture 保护模式,包括了Intel x86 Assembly& Microarchitecture 保护模式的使用技巧和注意事项,需要的朋友参考一下 示例 介绍 发明80286时,它支持旧的8086分段(现在称为“实模式”),并添加了一个称为“保护模式”的新模式。此模式在每个x86处理器中都存在,尽管通过各种改进(例

  • 把MSW的PE位(CR0内),将使80386工作在保护模式中。起始的当前特权级为0。段寄存器和在实模式下指向了相同的线性地址(在实模式中,线性地址和物理地址相同)。 在设置了PE位以后,初始代码要立即执行一条JMP指令,以刷新处理器预取指令队列。80386会在使用前预取、解码指令和地址。但是,当切换到保护模式时,预取的指令将不再有效(属于实模式的)。JMP指令将会使处理器罢弃无效的信息。

  • 服务模式切换比较麻烦,需要您的Kubernetes支持,目前我们使用的是istio的方案,也就是说您需要在你的kubernetes上安装istio的相关服务,并且在我们的模版管理将istio所需要的几个模版配置上。才能开启此功能。 如果您没有安装Istio,可跳过此章。 依赖 在"模版管理"菜单找到Gateway、VritualService、InitContainer、IstioProxy这几个

  • 好了,现在我们总结一下模式间切换的方法 其它模式 普通模式 Esc   普通模式 插入模式 i 在光标前插入 I 在行首插入 a 在光标后插入 A 在行末插入 o 在当前行之下新建行 O 在当前行之上新建行 r 替换当前字符 R 从当前字符开始替换 普通模式 命令模式 :   普通模式 可视模式 v 可视模式 V 可视行模式 Ctrl+v 可视块模式

  • 问题内容: 我想模拟一个继承的受保护方法。我不能直接从Java代码中调用此方法,因为它是从另一个包中的类继承的。我找不到指定此方法存根的方法 我查看了重写,这似乎它们仅用于私有方法! 如何指定保护方法? 问题答案: 果壳:不能总是用来对间谍进行打桩;使用。 假设静态导入和(两者): 您也可以设置on 。哪个更有意义取决于实际测试。

  • 我们常会做前台多语言模板,为了更好的实现多语言模板,CMF提供了良好的模板切换机制,我们在程序中定义了switch_theme钩子,通过这个钩子,我们可以制作各种模板切换功能,如多语言模板,手机模板; 在插件目录public/plugins我们内置了一个switch_theme_demo演示插件,通过这个插件你可以大体明白模板切换原理,你就可以实现自己的模板切换插件,如果你不想自己实现,也可以在我