您好,欢迎光临本网站![请登录][注册会员]  
文件名称: (第三章 10)“代码段间跳转” 和 “访问数据段”
  所属分类: 其它
  开发工具:
  文件大小: 202kb
  下载次数: 0
  上传时间: 2019-03-24
  提 供 者: weixin_********
 详细说明:NULL 博文链接:https://chuanwang66.iteye.com/blog/1075472么cPL为0和1的程序将无法访问此段 5.TS5:DPL规定了可以访问此TSS的最低特权级(这与数据段的规定是一致的) 2代码间跳转(段间) (1)普通转跳(没有使用调用门):即』MP或CALL后跟着48位全指针(16位段选择子+32位 地址偏移),且其中的段选择子指向代码段描述符,这样的跳转称为直接(普通)跳转。普 通眺转不能使特权缴发生跃辽,即不会引起CPL的变化,看卜面的详细描述: 致代码段 要求:CPL>=DPL,RPL不检查,也说是一致代码段描述符中的DPL规定可以转移到一致的代 码段的最内层特权级(3级可以转移到0级,而0级只能转移到0级)。一致代码段描述符 内DPL的这和解释,正好与正常的DPL的解釋相反。这是为了提供对应用程序的共亨支持, 而不要求改变特权级。 特权变化:转跳后程序的CPL=转跳前程序的CPL 非一致代码段 要求CPL=DPL&RPL<=DPL 特权变化:转跳后稈序的CPL=转跳前程序的CPL (2)通过调用门的眺转:当段间转栘指令』P和段间转移指令CALL后跟着的目标段选择子指 向一个调用门描述符时,该跳转就是利用调用门的跳转。这时如果选择子后跟着32位的地 址偏移,也不会被cpu使用,因为调用门描述符已经记录了目标代码的偏移。使用调门进行 的跳转比普通跳转多一个步骤,即在访问调用门描述符时要将描述符当作一个数据段来检查 访问权限,要求指示调用门的选择子的RPL<=门描述符DPL,同时当前代码段CPL<=门措述 符DPL,就如同访问数据段一样,要求访问数据段的程序的CPL<=待访问的数据段的DPL: 冋时选择子的RPL<=待访问的数据段或堆栈段的DPL。只有满足了以上条件,CPU才会进 步从调用门描述符中读取目标代码段的选择了和地址偏移,进行下一步的操作。 从调用门中读取到目标代码的段选择子和地址偏移后,我们当前掌握的信息又回到了先前, 和普通跳转站在了同一糸起跑线上(普通跳转一廾始就得到了目标代码的段选择子和地址偏 移),有所不同的是,此时,cPU会将读到的目标代码段选择子中的RPL清0,即忽晔了调 用门中代码段选择了的RPL的作用。完成这步后,CPU开始对当前程序的CPL,目标代码 段选择子的RPL(事实上它被清0后总能满足要求)以及由日标代码选择子指示的日标代码 段描述符中的DL进行特杈级检査,并根据情況进行跳转,具体情况如下 致代码段 要求:CPL>=DPL,RPL不检查 特权变化:因为RPL被清0,所以事实上永远满足RL<=DPL,这一点与普通跳转一致,适用 于JMP和CALL 转跳后程序的CPL=转跳前程序的CPL,因此特杖级没有发生跃迁。 非一致代码段MP 要求CPL=DPL(RPL被清0,不检查),若不满足要求则程序引起异常。 特权变化:转跳后程序的cPL=DPL因为前提是cPL=DPL,所以转跳后程序的CPL=DPL不会改 变CPL的值,特权级也没有发生变化。如果访问时不满足前提CPL=DPL,则引发异常。 非一致代码段(CAL) 要求:CPL≥=DPL(RPL被清0,不检查),若不满足要求则程序引起异常。 特权变化:转跳后程序的CPL=DPL,当条件CPL=DPL时,程序跳转后CPL=DPL特权级不发生跃 迁;当CPL>D門L时,程序跳转后CPL=DPL,特权级发生跃迁,这是我们当目前位置唯一见到 的使程序当前执行优先缴(cPL发生变化的跳转方法,即用CALL指令+调用门方式踯转,且目 标代码段是非一致代码段。 本篇只涉及段特权级的内容,关于各种门也只涉及调用门。 先看儿个名词: cPL( Current Privilege Level)当前特权级,由CS和Ss中的第O和第1位记录 DPL( De script or Privilege Level描述符特权级,由描述符中段属性的第5和第6位记录 RPL( Requested Privilege Leve)请求特权级,由选择子的第0和第1位记录 TSS(Task- State Segment)任务状态段,用于保存任务的相关信息 现在一步一步来讨论特权级的比较 1.cPL表示的是程序或者说任务的当前特权缴,它不属于某个段,当前的程序或任务不可能 同时表现出2种特权级,那么CS和Ss的第0位和第1位应该总是相同的。尝试将RPL异于 cPL的数据段选择了装入SS会引起异常。另外后面在论述跳转的吋候可以看到,它们!总是 相同的。 2DPL表示的是某个段或门的特权缴,当程序要访问段A的时侯,会将CPL和段A的DPL作 比较,以确定程序是否有权限访问段A 3RPL表示选择子是否有权限访问其所指向的段。选择子指向一个段描述符,段描述符指向 个段,段的特权级由段描述符中的DPL决定。当程序需要访问段A的时候,需要先通过 段A的选择子加载段A的段描述符,然后才能访问段A,在这个过程中CPU会先将段A选 择子中的RPL和段A描述符中的DPL作比较,确定选择子是否有权限访问其所指向的段 成功后才是CPL和段A的DPL的比较。 RPL、DPL之间的比较规则与CPL、D門L之间的比较规则一致。举个例子解释前面这句话的 意思:比如当前程序要访问一个数据段A,那么CPL不能大于段A的DPL,否则失败(后面 会讲到这一点)。这是CPL和段A的DPL的比较规则,那么同样段A的RPL、DPL也遵循这 样的规则,也就是段A的RPL不能大于段A的DPL RPL和CPL不会进行比较。 4.不管什么情况下,相同特权级之间的访问总是不会错的,所以后面的讨论中通常会忽珞相 同特权级之问的比较。 5保护模式下代码段中可以存放数据,但数据段中不能存放代码(跳转不过去)。所以代码 段既可以荻取代码段中的数据(皴读的代码段属性需要可读,就算是荻取自身段内数据也需 要可读),也可以获取数据段中的数据(数据段总是可读的),还可以跳转到其他代码段。而 数据段除了被读取,什么都做不了。 6代码段分为一致代码段和非一致代码段,这会对特权级比较产生影响,是否一致由段描述 符的第42位决定。数据段和代码不同,它总是非一致的。代码段只在作为被访问一方(或 者说目标代码段)时一致性才会对特权纵比较产生影响,在作为访问一方时没有区别。是否 致代码段的区别是,在段间跳转过稈中,如果目标代码段是一个特权级更高的一致代码段, 那么跳转成功,并且CPL不会收变(CS和SS都不会变),于是CPL异于目标代码段的RPL (CPL数值更大,特权级更低):如果目标代码段是一个特权级更高的非一致代码段,那么 跳转是会失败的,此时需要使用调用门。另外,如果目标代码段是一个特杈级更低的代码段 (不论是否一敛),那么跳转总是会失败的,除非使用RETF跳转。 7如果当前程序要访问一个数据段A,那么CPL不能大于段A的DPL,否则失败。也就是说 当前程序不能访问特权级更髙的数据段。CPL可以小于段A的DPL,也就是说当前程序可以 访问特杈级更低的数据段。当前程序对调用门和TSs的访问规则与此一致。 8特权级的检査是在选择子被装入段寄存器的时候进行的。先看相对简单一点的数据段A选 择子装入DS的情况(装入ES,FSGS类似,这里以DS为例说明):段A的DPL必须大于RPL, 同时还必须大」CPL(第7点),否则产生异常,段A的RPL不和CPL进行比较。 另外,当程序向低特权级跳转时,会检查CPL和DS指向的段的DPL,如果DPL小于CPL 那么DS会被加载空描述符的选择子。 9数据段A选择子裝入SS的情况(只有数据段选择子才能装入SS,代码段选择子不能装入 Ss,不管是否可读):段A的RPL和DPL都必须和CPL相等,否则失败 来看下为什么会这样。CPU要保证CS和Ss中的第0和第1位(CPL)致,所以段A的RPL 必须等于cPL。CPU还要保证当前程序的特权级和当前使用的堆栈段的特权级一致,所以段 A的DPL要等于CPL。 10代码段A选择子装入DS的情况(装入ES,FS,GS类似,这里以Ds为例说明):如果段A 不可读,装入失败。如果段A是可读的非·致代码段,那么CPL、段A的RPL都必须等于 段A的DPL,否则装入就会失败。如果段A是可读的一致代码段,那么CPL、段A的RPL都 可以大于段A的DPL,但不能小于段A的DPL 代码段A用段超越前缀CS读取自身段内数据的时侯,虽然没有选择子的裝入过程,但Cp∪ 会检查段A是否可读,如果不可读公产生异常。 11.最后是代码段的段间跳转。段间跳转可以用JMP、CALL、RETF和调用门。从高特权级到 低特权级只能用RETF;从低特杈级到高特权级非一致代码段,只能用调用门,而且还必须 是用CAL指令来使用调用门;从低特权级到晑特杖级‘致代码段」MP、CALL、调用门都可
(系统自动生成,下载前可以参看下载内容)

下载文件列表

相关说明

  • 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
  • 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度
  • 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
  • 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
  • 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
  • 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
 输入关键字,在本站1000多万海量源码库中尽情搜索: