x86 32位机的特权保护

2023-11-19

优先级划分、指令的权限检查和超出权限访问的异常处理等是构成特权保护的基础。本文将试图讲解为大家解决两大问题:

--win32汇编中为什么找不到中断指令的应用?比如int 7ch

--windows错误的‘蓝屏’是从哪里来的?

保护模式下,中断或异常往往从用户代码切换到操作系统代码中执行。由于保护模式下的代码有优先级之分,因此出现从优先级低的应用程序转移到优先级高的系统代码的问题,如果优先级低的代码能够任意调用优先级高的代码,就相当于了拥有了高优先级代码的权限。为了使高优先级代码能够安全的被低优先级代码调用,保护模式下增加了‘门’的概念。

门指向某个优先级高的程序所规定的入口点,所有优先级低的程序调用优先级高的程序只能通过门重定向,进入门所规定的入口点。这样就可以避免低级别的程序代码从任意位置进入优先级高的程序的问题。

保护模式下的中断和异常等服务也需要从‘门’进入,80386的门分为中断们、自陷门和任务门。

保护模式把所有的中断描述符放在一起组成中断描述符表IDT,为此80386处理器引入了一个新的48位寄存器IDTR。IDTR的高32位指定了IDT在内存中的基址(线性地址),低16位指定了IDT的长度,相当于指定了可以去支持的中断数量。

保护模式发生异常或者中断时,处理器先根据IDTR寄存器得到的中断描述符的地址,然后取出n号中断/异常的门描述符,再从描述符中取得中断服务程序的地址xxxx:yyyyyyyy,经过段地址转换后得到服务程序的32为线性地址并转移后执行。

windows中,操作系统使用动态链接库代替中断服务程序提供系统功能,所以win32汇编中int指令也就失去存在的意义。这就是在win32汇编中看不到int指令的原因,其实那么调用API的指令就相当于在DOS系统中使用int指令完成系统功能。


保护机制主要在下面几个方面:

段类型检查:由段描述符指定的

页类型检查

访问数据时的级别检查:

--优先级低的代码不能访问优先级高的数据段。80386的段描述符中有一个DPL(描述符优先级),表示这个段可以被访问的最低优先级

--而段选择符中含有RPL域(请求优先级),表示当前执行代码的优先级

知道有当DPL大于RPL时才可访问

以上是windows规定的保护条例,如果某个程序违反了,那么引发保护异常,这样就会蓝屏告诉用户试图访问不存在的内存。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

x86 32位机的特权保护 的相关文章

  • 汇编语言:使用冒泡排序算法将10个数按从小到大顺序排列

    汇编语言 xff1a 冒泡排序算法 题目描述 自定义一组有首地址为data的10个字的数组 xff0c 请利用冒泡排序算法来编写程序 xff0c 使该数组中的数按照从小到大的次序有序化 xff08 注 xff1a 10个字可以自己定义 xf
  • 汇编语言,数据段中,标号前面加不加offset有什么区别?

    data segment string db 40h dup 0 string 1 db 39 Input characters 39 0dh 39 39 data ends 那么 xff0c mov bx string 和 mov bx
  • [go]汇编语言

    文章目录 计算机结构常量与变量全局变量常量数组字符串 函数参数与返回值goroutine Go汇编程序无法独立使用 xff0c 必须以Go包的方式组织 xff0c 同时包中至少要有一个Go语言文件用于指明当前包名等基本包信息 如果Go汇编代
  • ARM汇编语言 - 简介 [三]

    上文介绍了ARM的数据处理指令 xff0c 本文将主要介绍ARM中的跳转指令 跳转指令 无条件跳转 ARM中的基础跳转指令就一个字母 34 B 34 xff0c 代表Branch xff0c 相比起x86中和它功能基本相同的 34 jmp
  • 【写一个操作系统】3—汇编语言学习及Makefile入门

    目录 汇编代码 制作启动区程序 Makefile 今天的主要任务是通过对helloos nas核心代码汇的理解进行编语言的学习 还有就是Makefile的学习 汇编代码 主要是对上次的汇编文件helloos nas核心部分的学习 核心部分的
  • arm/arm64函数栈帧(stackframe)结构和传参规则

    1 概述和问题 本文汇编代码的平台及编译器 arm gcc 分析函数调用栈的规则对于理解程序运行基本原理很有帮助 汇编代码分析crash问题也大有裨益 本文示例代码通过C语言函数调用一个汇编函数 再从汇编函数跳转回C函数 分析该示例的汇编代
  • CPU的标志寄存器

    1 ZF 零标志位 执行指令后结果为0 ZF 1 否则ZF 0 2 PF 奇偶标识位 它记录相关指令执行后 其结果的所有二进制位中1的个数是否为偶数 如果是偶数 PF 1 否则PF 1 3 SF 符号标识位 它记录相关指令执行后 其结果是否
  • 汇编语言(1)——从机器到汇编

    汇编语言 王爽 著 读书笔记 1 汇编语言的出现 最早期出现的计算机 是名副其实的 计算 机 这个机器可以执行一系列特定的指令 即机器指令 而由机器指令构成的集合被称为指令集 也就是我们说的机器语言 机器指令是由一系列的二进制数字0和1构成
  • Win8下用DOSBox编写汇编语言

    Win8下用DOSBox编写汇编语言 DOSBox 是一个 DOS模拟程序 可以很方便的移植到其他的平台 因此可以使用它在Win8系统中编写汇编语言 下面提供相关下载链接 DOSBox下载 http pan baidu com s 1qWw
  • 入门汇编(简单程序设计)

    将TABLE单元的10个字节数据传送到TABLE 5开始的单元 MOV CX 10 LEA SI TABLE LEA DI TABLE ADD DI 14 ADD SI 9 STD REP MOVSB 计算 X Y X 结果存Z单元 商是A
  • 汇编中16进制装换成为其他进制(2,8,10)

    16进制装换成为其他进制关键在于得到键盘输入 并将它保存在BINARY的这个变量里面 宏定义直接调用 例子中有 DISP etc 子程序的话要注意对主程序的信息的保护和恢复 我在这里使用的是在子程序里面去保护主程序的方式 你也可以在主程序调
  • VC6++配置汇编环境和第一个简单程序

    准备工作 1 下载并安装VC6 软件 2 下载Irvine32 lib库以及相关文件 Intel 汇编语言程序设计 irvine lib文件内 3 下载ml exe和ml err文件 ml from masm32文件内 以上准备工作的文件均
  • 汇编语言 第3版 王爽 检测点答案及详细解析

    第一章 基础知识 检测点1 1 1 1个CPU的寻址能力为8KB 那么它的地址总线的宽度为 13位 2 1KB的存储器有 1024 个存储单元 存储单元的编号从 0 到 1023 3 1KB的存储器可以存储 8192 2 13 个bit 1
  • 计算机组成原理——单周期CPU

    单周期CPU 项目代码 实验原理 MIPS指令 rom coe文件 代码 顶层模块SingleCycleCPU display外围模块 PC instructionMemory Alu模块 DataMemory ControlUnit 旧的
  • 汇编语言实现跑马灯 8051单片机

    通过一位 F 的16进制 转换为 2进制的 1111 然后移动一位 有三极管开关所改变 0的时候发光 1的时候变暗 所以一开始0FFH表示高8位为0 低8位为1111 1111 表示全暗 然后右移变为1111 1110亮第一个等 之后类推
  • 【汇编程序】试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否相同,若相同则显示“MATCH”,若不相同则显示“NO MATCH”

    STACKS SEGMENT STACK DW 100H DUP TOP LABEL WORD STACKS ENDS DATAS SEGMENT STRING1 DB abcd123 STRING2 DB abcd133 定义两个不同的字
  • 汇编:表格显示(含多个子程序)

    代码如下 assume cs code data segment db 1975 1976 1977 1978 1979 1980 1981 1982 1983 db 1984 1985 1986 1987 1988 1989 1990 1
  • C++反汇编 利用反汇编分析常见C/C++语句的底层实现(硬核)

    文章目录 赋值操作 if条件判断 指针和引用的实质 跳转函数 两个数字的交换操作 数组的赋值及 858993460数字的由来 总结 本节我们利用反汇编技术来对我们最常见的C语言语句进行解析 C 反汇编技术可以让你更好的理解C C语言的底层含
  • 汇编语言(第三版)读书笔记 2 - 第2章 寄存器

    第2章 寄存器 前一章所说的总线 相对于CPU内部来说是外部总线 内部总线实现了CPU内部各个器件 运算器 控制器 寄存器 之间的联系 外部总线实现了CPU和主板上其他器件的联系 不同的CPU 寄存器的个数 结构是不相同的 8086 CPU
  • 代码段中存放数据

    1 前面我们写的程序中 只有一个代码段 我们先来在代码段中使用数据 看看和单独一个数据段存放数据有什么差别 考虑这样一个问题 编程计算以下8个数据的和 结果存放在ax寄存器中 0123H 0456H 0789H 0abcH 0defH 0f

随机推荐

  • SpringBoot打成的jar和普通的jar有什么区别?

    SpringBoot项目最终打包成的jar是可执行jar 这种jar可一天通过java jar xxx jar命令来运行 这种jar不可以作为普通jar被其他项目依赖 即使依赖了也无法使用其中的类 SoringBoot项目打包的jar无法被
  • Mybaits源码学习(七):动态参数

    一 前文回顾 在前文中我们分析了Mybatis是如何替我们实现了我们所编写的Mapper接口 采用JDK动态代理 在获取Mapper的时候创建Mapper的实现类 本文将继续学习Mybatis中其他的知识 今天索要研究的是Mybatis是如
  • 阿里云mysql数据库修改密码问题小记。

    场景描述 一台阿里云服务器 上面有装mysql数据库 但是不知道数据库的密码 怎么办 改密码呗 下面一系列故事就围绕改密码展开来了 整个过程 1 一顿操作猛如虎 感觉自己不是新手 得有追求 得看看系统的版本 等一系列的参数 其实然并卵 2
  • 全国失信被执行人黑名单信息查询API接口

    接口地址 https api hackeus cn api shixin 请求协议 HTTP HTTPS 请求方式 GET POST 返回格式 JSON 请求示例 https api hackeus cn api shixin api ke
  • RT-Thread通过SDIO接口使用SD卡,使用ulog保存日志到sd卡

    开发环境 野火的stm32f407 rt thread studio版本是版本 2 2 6 stm32f4的资源包为0 2 2 rt thread版本为4 0 3 开发板原理图 引脚分配 PC8 SDIO D0 PC9 SDIO D1 PC
  • 【JavaSpring】Aop案例

    测定接口执行效率 描述 在接口执行前输出当前系统时间 开发模式 XML or 注解 思路分析 1 导入坐标 pom xml
  • python变量的作用域及生命周期_Python——变量的作用域

    原创声明 本文系博主原创文章 转载及引用请注明出处 1 在编程语言中 变量都有一定的作用域 用来限定其生命周期 且不同类型的变量作用域不同 在Python中解释器引用变量的顺序 优先级 为 当前作用域局部变量 gt 外层作用域变量 gt 当
  • python frame用法_Pandas Series.to_frame()用法介绍

    系列被定义为可以容纳整数 字符串 双精度值等的列表类型 它以列表的形式返回对象 该列表的索引从0到n开始 其中n表示系列中值的长度 系列和数据框架之间的主要区别在于 系列只能包含具有特定索引的单个列表 而数据框架是可以分析数据的多个系列的组
  • CentOS8基础篇11:CentOS8挂载本地ISO,配置本地yum源

    1 创建ISO镜像挂在目录 第一种方法 VMware用户可以直接用镜像挂载 2 挂载镜像 第一种方法测试成功 第二种方法 采用ISO镜像文件方式挂载 把ISO文件复制到 opt目录下 这也是最好的方式 将Centos8的ISO镜像上传到IS
  • Linux大文件查看利器:掌握Less命令的使用和技巧

    文章目录 简介 1 1 less命令的作用和功能 1 2 less命令与more命令的对比 安装和基本用法 2 1 Linux系统中less命令的安装方法 2 2 使用less命令打开文件 2 3 基本导航和浏览文件 2 4 在文件中搜索关
  • 三层交换机实现不同vlan间通信

    1 器材 二层交换机为神州数码DCS 3950 路由交换机为神州数码DCRS 5650 路由器为神州数码DCR 2600 2 原理 2 1交换机的带外管理和带内管理 交换机的管理方式可以分为带内管理和带外管理两种管理模式 所谓带内管理 是指
  • 输出整数m中删除n位之后的最大(小)数(保持各位顺序不变)

    这个题不知道ac没有 因为是随便看到的一个题 没办法测 如果有错误请帮我指出来 看到很多复杂度很高的暴力破解方法 有三层循环的那种 我这个复杂度应该会低一点 思路 先将结果初始化最后m n个字符 放在res中 从res的第一位开始 在它前面
  • C# ADSL自动拨号实现代码

  • docker安装mysql8

    docker 默认mysql版本为8 0 docker pull mysql 启动mysql8 首先需要新建目录及文件 文件 F mydocker mysql8 config my cnf 目录 F mydocker mysql8 data
  • java数组专题

    下文笔者讲述求数组并集的方法分享 如下所示 实现思路 1 定义一个set集合 2 将数组中的元素都放入set中 则可实现数组并集 例 package com java265 other import java util HashSet im
  • QT 切换界面时候布局错乱

    偶然发现 在win下 全屏显示 showFullScreen 时候 label 如果开启 自动换行功能会出现 布局错乱QLabelt gt setWordWrap true
  • 机器学习里的 kernel 是指什么?

    转自我的知乎回答 机器学习里的 kernel 是指什么 我换个角度来解释这个问题 机器学习在做回归或者分类时有一个很朴实的想法 预测 x 的值 那就在训练集 X 中寻找那些与 x 相似的样本 再把这些样本的值加权作为预测值 这里有两个问题
  • Unity 导出XCode工程运行报错: ‘UnityFramework/UnityFramework.h‘ file not found

    简介 近期项目升级到2019 4 10f1版本 在用自动化打包的时候 遇到了一些问题 其中一个是 在导出XCode工程之后 运行工程的时候 编译报错 UnityFramework UnityFramework h file not foun
  • ​CVPR 2023

    论文链接 https arxiv org pdf 2306 02763 pdf 代码链接 https github com ZhenglinZhou STAR 要解决的问题 人脸关键点检测标注中存在语义歧义问题 语义歧义是指不同的标注者对同
  • x86 32位机的特权保护

    优先级划分 指令的权限检查和超出权限访问的异常处理等是构成特权保护的基础 本文将试图讲解为大家解决两大问题 win32汇编中为什么找不到中断指令的应用 比如int 7ch windows错误的 蓝屏 是从哪里来的 保护模式下 中断或异常往往