
代码段段间跳转流程
发布日期:2021-05-19 04:41:44
浏览次数:10
分类:博客文章
本文共 1092 字,大约阅读时间需要 3 分钟。
修改cs段寄存器
除了cs段寄存器之外,其他的段寄存器都可以通过mov,les,lds这样的指令修改。但是cs不行,cs的修改涉及到eip指令指针的修改。
只修改eip
jmp,call,ret等都是段内跳转指令,他们都是在不改变cs的情况下只改变eip。因为jmp,call是段内跳转指令,所以不需要进行权限的检查。
同时修改eip和cs
jmp far,call far,retf,int等都是段间跳转指令,他们改变cs跳向其他的代码段,同时也改变了eip。因为jmp far,call far指令是段间跳转指令,所以需要进行必要的权限检查。
跳转形式
jmp far,call far根据段选择子指向的段描述符的不同分成四种形式进行段间跳转。
- 段选择子指向的段描述符是一个普通的代码段的段描述符
- 段选择子指向的段描述符是一个调用门的门描述符
- 段选择子指向的段描述符是一个TSS任务段的描述符
- 段选择子指向的段描述符是一个任务门的门描述符
段选择子指向的段描述符是一个普通代码段的段描述符
jmp far跳转流程
例如指令 jmp far 0x20:0x00401005
拆分段选择子
段选择子为0x20,Index索引为4,TI位为0,RPL为0。查找段描述符
因为其TI位为0,所以CPU会向GDT表中查找索引为4的段描述符。其会先检查此段描述符的P位是否为1,如果为0此段描述符就无效。因为是代码段跳转,所以要求此段描述符为代码段或者是系统段(调用门,TSS任务段,任务门),但是不能为数据段。权限检查
如果是非一致代码段,要求CPL == DPL (权限要一致)且 RPL <= DPL。如果是一致代码段,要求 CPL >= DPL(低权限使用)加载段描述符
cpu将段描述符加载到cs段寄存器中(可见与不可见部分)代码执行
CPU将cs.base + offset值写入EIP,执行cs:eip完成段间跳转
call far跳转流程
call far和jmp far差不多,但是其涉及到堆栈的变化(返回地址和cs寄存器的保存与还原)。
注意:对于段选择子指向的段描述符是一个普通代码段的段描述符时,无论是一致代码段还是非一致代码段,CPL都不会变(CPL不变其堆栈也不会切换)。无论什么时候段选择子的RPL并不会影响CPL。
例如:cs本来是0x1b,CPL为3,如果jmp far 0x48:0x004014FD
,段选择子的RPL为0。执行此指令CS会变为0x4B,而不是0x48,CPL没有改变还是3。要想改变CPL(提升权限)只能通过调用门等一些门。 发表评论
最新留言
感谢大佬
[***.8.128.20]2025年04月17日 06时46分25秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
机器学习全教程
2019-03-14
idea在连接mysql数据库时区错误
2019-03-14
2021-05-14
2019-03-14
Kali-linux:nmap命令
2019-03-14
s3c2440 ads程序移植到keil中(一) 初步完成
2019-03-14
工程经济—建设工程定额
2019-03-14
工程经济—工程量清单编制
2019-03-14
1Z204050、施工质量不合格的处理
2019-03-14
1Z308020、民事诉讼制度
2019-03-14
JSP中的九大内置对象
2019-03-14
【字节网盘】九款超好看不同页面404源码
2019-03-14
两款404页面自动跳转源码html
2019-03-14
二改广告横幅在线制作源码 美化版
2019-03-14
服饰贴图定制小程序V1.2.4安装更新一体包+小程序前端
2019-03-14
一款好看新颖的404页面源码
2019-03-14
创意沙雕黑色蝙蝠侠/小丑动态404页面源码
2019-03-14
使用Mac OS X如何开启和配置防火墙
2019-03-14
格式化Mac硬盘---DoYourData Super Eraser安全、快速
2019-03-14
MacOS磁盘分区出错的解决办法
2019-03-14