特权级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去调用希望被调用的代码。

特权级和调用门

转自:http://blog.csdn.net/wjwbin1986/article/details/6144058            http://1025250620.iteye.com/b...

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

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

保护的详尽意义:通过调用门转移特权级

摘要:在汇编语言的编程和操作系统的编写过程中,我们经常能听说到“保护模式”这个名词。为什么要叫“保护模式”呢?保护 二字的含义何在?本文主要探讨,“保护模式”下面各种具体的保护机制,这些保护机制产生的...
  • bfboys
  • bfboys
  • 2016年09月01日 12:29
  • 413

一个操作系统的实现 不同特权级代码段之间的跳转 CPL DPL RPL 调用门

http://blog.csdn.net/begginghard/article/details/7262901 1、特权级 2、一致代码段和非一致代码段 3、DPL、RPL、CPL分别...

80386保护模式--GDT,LDT,TSS,调用门,特权级转移,附pmtest5代码详解

教材选择一个操作系统的实现,作者于渊,看此书前最好了有汇编语言,保护模式下的汇编(参考清华杨季文的80X86汇编语言程序设计教程),C语言,计算机组成原理,微机接口,操作系统相关知识。 一、8038...
  • jltxgcy
  • jltxgcy
  • 2013年03月10日 11:14
  • 3778

通过retf和调用门实现特权级转换

不打算按别人的思路来,因为在我学的过程中上网查,发现网上的博客都是互相抄的,最终还是抄书的。Intel 64 和 IA-32架构处理器在进入保护模式之后,就会有一些列保护机制。其中出现了三个特别重要的...

(第三章 9)“调用门” 和 “利用调用门在高低特权级的转移”

在此之前,先要熟悉汇编指令“长/短jmp”、“长/短call”、ret、retf.   一、调用门“纯粹”作为入口地址     调用门本质上就是个入口地址,只是增加若干属性而已。例子pmtest...
  • bfboys
  • bfboys
  • 2016年09月01日 16:18
  • 273

特权级--ring0到ring3

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

自己动手写操作系统 降入ring3特权级

;进入ring3 push SelectorStack3 push TopOfStack3 push SelectorCodeRing3 push 0 retf

特权级--ring3到ring0

还记得吗?我们用调用门和lcall指令实现特权级由低到高的转移. 假设我们想由代码A转移到代码B,运用一个调用门G,即调用门G中的目标选择子指向代码B的段。实际上我们要考虑4个要素:CPL、RPL、D...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:特权级3(调用门)
举报原因:
原因补充:

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