基于Intel x86架构CPU的保护模式

一、 什么是保护模式?

  • 什么是x86架构
    x86是由Intel公司推出的一种【复杂指令集】,能够生产这种指令集的CPU公司主要是Intel和AMD公司。
  • 什么是x64架构
    AMD和Intel公司都拓展了x86指令集,AMD推出的称为AMD64指令集,Intel推出的称为Intel64指令集。由于AMD64和Intel64差别很小,所以在很多资料中统称为x64,x64指令集是对x86的拓展,是向下兼容的。
  • 基于Intel x86架构CPU有3个模式
    实模式、保护模式、虚拟8086模式。大多数操作系统都是运行在“保护模式”下的。
  • 保护模式的特点
    特点是通过两种机制来“保护”系统的数据结构(如GPT表、IDT表),这两种机制是 “段的机制”“页的机制”
  • 学习保护模式有什么用?
    写驱动,是调用Ring0下的系统API。写用户程序,是调用Ring3下的系统API。
    而学习保护模式后,可以真正理解内核是如何运作的。学保护模式,可以不通过驱动,而是在ring3层实现驱动要做的事,可以完全不调用操作系统的API去读写内存。

二、段的机制

2.1 段寄存器

2.1.1 段寄存器的结构

  • 段寄存器共有8个(ES、CS、SS、DS、FS、GS、TR、LDTR),段寄存器共有96位,其中低16位是可见的,剩余80位不可见。其结构如下:
    	struct SegMent
    	{
    		WORD Selector;		//低16位可见
    		WORD Atrributes;	//16位,表示当前段寄存器是 可读 or 可写 or 可执行
    		WORD Base;			//16位,表示当前段从何开始
    		DWORD Limit;		//32位,表示当前段的长度
    	}
    

在这里插入图片描述

2.1.9 段寄存器的读写操作

  • 读时,只能读低16位的可见部分
  • 写时,写的是段寄存器的全部96位
  • 读写ES、CS、SS、DS、FS、GS这6个段寄存器的指令是【MOV】,读写LDTR的指令是【SLDT/LLDT】,读写TR段寄存器的指令是【STR/LTR】
发布了70 篇原创文章 · 获赞 13 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/forchoosen/article/details/104952954