特权级3(调用门)

转载 2016年08月31日 09:47:20

调用门的作用

gate简单来说可以想象成政府为人民提供的一个政府诉求中心,它可以集中收集人民对政府的要求和投诉,然后把这些诉求发给相关的政府部门来处理。

 

提供了受保护的间接调用,为任务内的特权转移提供了安全可靠的方法。由于程序不可能进入具有更高优先级段中的任何位置。如果他们一定要进入,则只能使用调用门进入到调用门描述符指定的位置。而操作系统中定义了系统中的全部门,因此也就保证了所有的门只能进入几个受托的过程。这与试用软中断间接调用BIOS和DOS的功能调用所提供的机制相似。例如分配存储空间和I/O等操作。一旦通过调用门进入后,CPL发生改变,程序就完全进入了被调用代码的特权级。

 

 

调用门描述符的存储位置:

调用门描述符可以放在GDT、LDT中,但是不能放在IDT中。

 

调用们的访问规则:

调用门就是允许外层程序访问非一致代码时能够像一致代码那样使用。门的访问规则就像是对数据段的访问——使用调用门的代码的特权级要>=调用门的特权级才能使用该门,否则(调用程序的特权级比调用门中的特权级低)不允许访问。

 

例如,如果调用门描述符中的DPL=2,那么一个CPL=2的程序可以使用该门调用一个特权级为1的过程,但特权级为3的程序则不行。

 

通过调用门调用门描述符所对应的选择子中对应的代码需要对以下几个标志进行检查:

● CPL(当前特权级)

● 调用门选择子的RPL

● 调用门描述符的DPL

● 目标代码段的段描述符的DPL

规则对一致码和非一致码也有所不同(C=1/0

 

处理器首先会处理调用进程和调用门之间的特权级检查,如果检验通过了处理器紧接着就用代码段描述符DPL和调用进程的CPL进行特权级检查。

 

从下表中可以看到,只有CALL指令可以使用调用门将进程控制转移到一个特权级更高(DPL<CPL)的非一致代码段,而对JMP指令使用调用门与否是一样的。

 

 

 

 

指令

访问门的权限

访问代码权限

CALL

CPL <= callgate.DPL

&&

RPL <= callgate.DPL

目标为一致代码段:destination. DPL <= CPL

目标为非一致代码段:destination.DPL <= CPL

JMP

CPL <= callgate.DPL

&&

RPL <= callgate.DPL

目标为一致代码段:DPL <= CPL

目标为非一致代码段:DPL = CPL

 

如果调用特权级更高的非一致目标代码段,CPL就降为目标代码段的DPL特权级,并且会发生栈切换。如果调用或者跳转到一个特权级更高的一致目标代码段,CPL不会发生变化,也不会发生栈切换。

 

我在想如果系统有定义的话,如果不嫌麻烦,你也完全可以从一个门调用另一个门中的程序(调用门1调用门2程序)。这样做不会让你得到任何额外的好处,你的权限也不会有任何提升。所以你完全可以直接调用门2去调用希望被调用的代码。

保护模式编程——保护的详尽意义:通过调用门转移特权级

保护模式及其编程——保护机制 摘要:在汇编语言的编程和操作系统的编写过程中,我们经常能听说到“保护模式”这个名词。为什么要叫“保护模式”呢?保护 二字的含义何在?本文主要探讨,“保护模式”下面各种具体...
  • trochiluses
  • trochiluses
  • 2014年02月20日 22:14
  • 2989

特权级3——调用门

调用门的作用 gate简单来说可以想象成政府为人民提供的一个政府诉求中心,它可以集中收集人民对政府的要求和投诉,然后把这些诉求发给相关的政府部门来处理。   门提供了受保护的间接调用,为任务内的...
  • bfboys
  • bfboys
  • 2016年09月01日 16:00
  • 249

保护模式特权级变换总结

特权级的东西很乱,我决定今天花一点时间好好的整理一下,我一步一步慢慢开始,比较郁闷的是还不知道理解得正确不正确,先写着吧: 首先,特权级别一共有四个特权级别(0-3),然后呢,数字越小,级别越高。 ...
  • bfboys
  • bfboys
  • 2016年09月02日 11:21
  • 349

32位保护模式学习小结(2)---任务的隔离和特权级保护

任务,任务的LDT和TSS 程序是记录在载体上的指令和数据,其正在执行中的一个副本,叫做任务(Task)。而用户程序就是任务,内核程序就是操作系统的缩影。LDT我们把所有的段描述符都放在GDT中。...
  • wrx1721267632
  • wrx1721267632
  • 2016年08月02日 23:05
  • 626

特权级和调用门

在IA32的分段机制中,总共有4个特权级别,从高到低分别是0、1、2、3。处理器通过识别下面3中特权级进行特权级检验 1.CPL(Current Privilege Level)CPL是当前执行的程...
  • judyge
  • judyge
  • 2016年08月30日 22:54
  • 121

10-调用门(有参)实验

编写R0函数int g_a, g_b, g_c; __declspec(naked) void getParam(int a, int b, int c) { __asm { ...
  • q1007729991
  • q1007729991
  • 2016年09月14日 23:10
  • 631

特权级--ring0到ring3

内核要和用户程序分开,内核一定要安全,不能被用户程序干涉,但是有时候用户程序也需要读取内核的某些数据,怎么办呢?x86就引入了访问特权等级(0-3)的机制,x86 cpu共有4个特权级 level0 ...
  • bfboys
  • bfboys
  • 2016年09月03日 10:19
  • 165

操作系统实践(6)——特权级转移

关于CPL、DPL、RPL这几个概念刚开始是有点难理解的,因为各种情况都有,有点复杂。我觉得最简单的办法就是,把程序的各种段,理解为国家的各种政府机构,例如省级机构、市级机构、县级机构等,DPL就是用...
  • hackooo
  • hackooo
  • 2015年07月07日 16:17
  • 357

特权级0的代码到特权级3代码的转移之IRET指令

由 于处于特权级0的代码不能直接把控制权转移到特权级3的代码中执行,但中断返回操作是可以的,因此当初始化GDT、IDT和定时芯片结束后,我们就利用中 断返回指令IRET来启动第1个任务。具体实现方法是...
  • wangyi1988wang
  • wangyi1988wang
  • 2013年12月31日 22:11
  • 963

特权级2(不通过调用门)

特权级2——不通过调用门   特权级检查的时间 在选择子没有被装入CS之前进行检查,如果检查成功则将选择子装入CS寄存器。相应的RPL变为CPL。我觉得这个检查的机制就像是数据库的对内容的约束检查,或...
  • wswupeng
  • wswupeng
  • 2010年05月11日 20:59
  • 854
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:特权级3(调用门)
举报原因:
原因补充:

(最多只允许输入30个字)