码迷,mamicode.com
首页 > 其他好文 > 详细

代码间的跳转

时间:2020-04-23 23:30:24      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:查表   col   直接   二进制   提升   代码执行   拆分   任务   操作   

 

代码间跳转的执行流程

以下面代码为例,看CPU在跳转过程做了什么操作。

jmp 0x20,0x004183d7

  (一)段选择子拆分

    0x20的二进制形式  0000_0000_0010_0000;

    RPL=00;

    TI=0;

    INDEX=4;

  (二)查表得到段描述符

    TI=0,所以查GDT表;

    INDEX=4,根据索引找到对应的段描述符;

    四种情况可以跳转:代码段,调用门,TSS任务段,任务门;

    数据段就不行,没有jmp数据段的;

  (三)权限检查

    如果是非一致代码段,要求:CPL=DPL,并且,RPL<=DPL;

    如果是一致代码段,要求:CPL>=DPL;

 

  (四)加载段描述符

    通过上面的权限检查后,CPU会将段描述符加载到CS段寄存器中;

  (五)代码执行

    CPU将CS.Base+Offset的值写入EIP,然后执行CS:EIP指令;

 

直接对代码段进行JMP或CALL的操作,无论目标是一致代码段还是非一致代码段,CPL都不会发生改变,

如果要提升CPL的权限,值能通过调用门。

-------------------------------------------

滴水中级--代码跨段跳转流程

代码间的跳转

标签:查表   col   直接   二进制   提升   代码执行   拆分   任务   操作   

原文地址:https://www.cnblogs.com/a-s-m/p/12764051.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!