x86 32位机的特权保护
来源:互联网 发布:知乎看见了女朋友 编辑:程序博客网 时间:2024/05/22 13:08
优先级划分、指令的权限检查和超出权限访问的异常处理等是构成特权保护的基础。本文将试图讲解为大家解决两大问题:
--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规定的保护条例,如果某个程序违反了,那么引发保护异常,这样就会蓝屏告诉用户试图访问不存在的内存。
- x86 32位机的特权保护
- 32位保护模式学习小结(2)---任务的隔离和特权级保护
- 32位x86保护模式代码
- x86 CPU的操作模式 保护模式下的特权级
- 任务和特权级保护(二)——《x86汇编语言:从实模式到保护模式》读书笔记32
- 80x86保护模式下特权级转移
- 80x86保护模式下特权级转移
- x86 cpu 设置保护位
- x86 cpu 32位,保护模式下,EIP寄存器存放的是线性地址还是物理地址
- windows游戏编程<四>X86 32位保护模式下的内存管理概述(一)
- windows游戏编程<六>X86 32位保护模式下的内存管理概述(二)
- 访问数据段时的特权级检查,修改SS时的特权级检查——《x86汇编语言:从实模式到保护模式》读书笔记30
- 对特权位的理解
- 保护模式下的特权级检查
- 保护模式下的特权级检查
- 任务的隔离和特权级保护
- 代码段间转移控制时的特权级检查(JMP/CALL)——《x86汇编语言:从实模式到保护模式》读书笔记28
- x86的保护模式(一)
- Myacm Triangles
- smali
- Perl简单的文件读写
- 老师来了——观察者模式
- cocos2d WIN32环境搭建
- x86 32位机的特权保护
- 资料收集
- 装箱问题_DP
- 设计模式------简单工厂模式
- Linux下C程序的存储空间布局
- Cadence 16.6 原理图设计实用技巧:接地网络名称显示
- hdu-3401-Trade-单调队列优化的DP
- HDU 1789 Doing Homework again
- 小米路由器探测和测评本人亲测