• [笔记] Windows内核课程:保护模式《一》保护模式



    前言

    基础

    CPU起源

    在这里插入图片描述

    • 特德 霍夫 1971年11月15日 发明了第一款微处理器。
    • 英特尔奔腾Pentium 最大区别是引入超线程

    超线程:英特尔® 超线程技术是一项硬件创新,允许在每个内核上运行多个线程。更多的线程意味着可以并行完成更多的工作。
    超线程如何工作?当英特尔® 超线程技术处于激活状态时,CPU 会在每个物理内核上公开两个执行上下文。这意味着,一个物理内核现在就像两个“逻辑内核”一样,可以处理不同的软件线程。较之传统的单线程内核,两个逻辑内核可以更有效地完成任务。英特尔® 超线程 (HT) 技术充分利用了内核以前在等待其他任务完成时的空闲时间,提高了 CPU 吞吐量。

    CPU结构

    CPU物理结构

    在这里插入图片描述
    CPU芯片:CPU芯片是计算机的大脑,负责处理和执行各种计算任务,是实现计算能力的核心组件。
    CPU引脚:CPU引脚是芯片上的金属接点,用于与其他电子器件进行电连接和数据传输,扮演着信息输入输出和控制信号传递的重要角色。

    CPU逻辑结构

    控制单元:
    CPU控制单元是CPU的关键部件,负责解析和执行指令,协调各个部件的工作,以及控制数据流程和处理器状态的转换。它是CPU的指挥中心,确保计算机按照预定的程序顺序执行操作。

    控制指令:
    CPU控制指令是一组特定的机器指令,用于控制CPU的操作,例如跳转、支、循环等,以及控制其他外设和存储器的读写操作,从而实现程序的顺序执行和数据处理。

    存储单元:
    CPU存储单元是用于存储和访问数据的部件,包括寄存器和高速缓存,用于暂时存储指令和数据,以提高CPU的运行效率和数据访问速度。

    数据:数据是指在计算机中用来表示和处理信息的数字、字符、图像等各种形式的数据,包括被处理的输入数据、中间计算结果和最终的输出数据等。

    运算单元:
    CPU运算单元是CPU的核心组成部分,负责执行各种算术、逻辑和控制操作,包括整数运算、浮点运算、位操作等,以实现计算机的运算和处理功能。

    4004、8008、8080阶段CPU结构

    在这里插入图片描述

    在这里插入图片描述

    CPU架构

    • RISC架构(Arm)
    • CISC架构(x86)
    1. RISC 更简单
    2. CISC可变长指令,指令集更多。反之RISC只有几百条指令,更少。
    3. RISC功耗低
    4. RISC也有保护模式
    5. CISC段页 4k,RISC段页2k

    cisc架构指令的执行过程

    几乎所有的冯·诺伊曼型计算机的CPU,其工作都可以分为5个阶段:

    • 取指令、
    • 指令译码
    • 访存取数
    • 执行指令
    • 结果写回

    例如:

    eip:  mov eax,dword ptr ds:[0x12345678]
    
    • 1

    转为机器码:

    0xb8 0x78,0x56,0x34,0x12
    
    • 1

    执行该指令会经过几个阶段:

    • 先取0xb8 # 取指令
    • 0xb8解码为mov # 指令译码
    • 读取0x12345678内存数据 # 访存取数
    • 执行mov

    指令预取,一般在EIP指向当前代码段时,会存在预取过程(本地缓存)(预取会并行执行以上后4个步骤(指令译码…),预取缓存大概9-32条指令。

    JMP EIP 和JCC(JZ,JC EIP)区别:

    1. JMP 会清空本地缓存,JCC不会
    2. JMP比JCC指令长,JCC 2字节,JMP 4字节
    3. JMP指令跳转范围最大2G,JCC范围-127-128字节。这种跳转范围会影响性能。

    0x12345678 实际是逻辑地址,逻辑地址=段地址*10+偏移地址,
    而保护模式是访问一个表,访问标识为ds的项,并且检查你是否有权限访问ds项,一般是ds段寄存器对应的段描述符,记录该段是否有权限访问某内存。

    实模式的结束和保护模式的起源

    WinNT之前

    例如win95,win98 winxp 都是实模式,内存都是线性内存,如下图。
    在这里插入图片描述
    逻辑地址的计算:线性地址=段地址*0x10+偏移地址,

    缺点:

    • 内存不安全,随意的进程 即可通过偏移内存的方式修改内核

    WinNT之后

    例如win7之后,主要通过GDT将ring3和ring0内存区分开
    在这里插入图片描述
    然后出现段页来区分每个进程地址的上下文,来访问进程的内存。
    在这里插入图片描述

    什么是保护模式?

    x86 CPU的三种模式:

    • 实模式
    • 保护模式
    • 虚拟8086模式

    保护模式实际是保护寄存器

    为什么不直接讲x64的

    x86是由Intel推出的一种复杂指令集能够生产支持,这种指令集。

    CPU公司主要是Intel和AMD

    AMD在1999年的时候,拓展了这套指令集,称为x86-64,后改名为AMD64,Intel也兼容了这个产品,称为Intel64.但AMD64和ntel64几乎是一样的,所以在很多资料中统称为x64.

    这套指令集是对x86的拓展,向下兼容的。

    保护模式有什么特点?

    • 段的机制
    • 页的机制

    参考书

    Intel白皮书第三卷
    滴水内部教程

    实践项目

    反调试
    PCHuter

    总结

    需要c语言,汇编基础会更好

  • 相关阅读:
    【图像处理】道格拉斯-普克算法(曲线的折线段逼近)
    P2010 [NOIP2016 普及组] 回文日期
    关于 Object obj = new Object()
    安装 tensorflow GPU(使用 conda)
    单调栈及其应用
    普通用户如何利用小红书赚钱呢?小红书的流量是真的吗?
    如何通俗理解超级浏览器?可以用于哪些场景?有哪些品牌?
    Spring和Spring Boot的区别
    spring
    共享购模式:数据驱动的消费增值新体验
  • 原文地址:https://blog.csdn.net/qq1113673178/article/details/130303109