段间转移、长调用、短调用
段间转移不同于段内转移,段间转移同时修改CS:EIP,而段内转移只修改EIP
如JMP FAR 与JMP之间的区别
段间转移
JMP 0x20:0x004183D7
流程
1、段选择子拆分:0x20=0x00100000
RPL=00,TI=0,Index=10(4)
2、查表得段描述符:
TI=0代表查找GDT表,Index=4找到对应的段描述符(只有是代码段、调用门、TSS任务段、任务门的情况下,才可以跳转)
3、权限检查:
如果是非一致代码段,要求:CPL==DPL&&RPL<=DPL
如果是一致代码段,要求:CPL>=DPL
4、加载段描述符:
CPU将段描述符加载到CS段寄存器
5、代码执行:
CPU将CS.base+Offset(0x004183D7)值写入EIP,执行CS:EIP处代码。
一致代码段
又称共享段,该段代码可让应用层直接访问,故CPL>=DPL,即CPL权限可以低于DPL
非一致代码段
只有同级权限可以使用。即CPL==DPL。
以下部分转载自:https://blog.csdn.net/qq_35425243/article/details/82705581
短调用
指令格式: CALL 立即数/寄存器/内存
发生改变的寄存器 ESP EIP
长调用(跨段不提权):
指令格式:CALL CS:EIP
发生改变的寄存器 ESP EIP CS
调用时会先PUSH调用者的CS,再PUSH返回地址
长调用(跨段并提权):
指令格式:CALL CS:EIP(EIP废弃)
发生改变的寄存器 ESP EIP CS SS
调用前,程序处于3环堆栈,CALL 执行后,先后PUSH调用者SS,ESP(3环栈顶),CS,返回地址(3环EIP返回地址)
CALL执行后,程序CPL为0,具有CPU最高特权级别,堆栈转入0环堆栈,返回时读取PUSH的数据返回3环
以上表明,不同权限级别的环对应的堆栈不同
总结
1、跨段调用时,一旦有权限切换,就会切换堆栈
2、CS的权限一旦改变,SS的权限也要随着改变,CS和SS的等级一样
3、JMP FAR只能跳转到同级非一致代码段,但CALL FAR可以通过调用门提升CPL权限
4、SS和ESP(0)来自TSS段
段间转移、长调用、短调用相关推荐
- 【汇编】转移指令——offset 标号、jmp无条件转移,段内/段间转移区别、段内近转移/段内短转移、jcxz指令、loop指令
多种转移指令详解 9.1 转移 综述 9.2 offset 标号 9.3 jmp指令 段内/段间转移区别 段内短转移与近转移 jmp小结 9.4 jcxz 9.5 loop 9.1 转移 综述 转移按 ...
- 代码段间转移控制时的特权级检查(JMP/CALL)——《x86汇编语言:从实模式到保护模式》读书笔记28
代码段间转移控制时的特权级检查(JMP或者CALL指令) 在保护模式下,JMP或CALL指令可以用以下四种方法之一来引用另外一个代码段: 1. 目标操作数含有目标代码段的段选择子和偏移 2. 目标操作 ...
- Windows保护模式(三)长调用与短调用调用门
长调用与短调用 短调用 指令格式 CALL 立即数 / 寄存器 / 内存 堆栈变化 发生改变的寄存器 ESP EIP 长调用(跨段不提权) 指令格式 CALL CS:EIP(如果是通过调用门则 EIP ...
- 什么是段错误,段内,段间
https://zhidao.baidu.com/question/447013382.html 段错误:指访问的内存超出了系统所给这个程序的内存空间. 汇编语言的程序设计是分4个段来设计的,即用来放 ...
- (9)跨段跳转,短调用和长调用堆栈图
一.回顾 上一节,我们学习了 JMP FAR 实现段间跳转,该指令修改了 CS 和 EIP.本节我们学习长调用 CALL FAR,该指令除了修改 CS和EIP,还会修改堆栈. 二.CALL 堆栈图 学 ...
- [转](9)跨段跳转,短调用和长调用堆栈图
一.回顾 上一节,我们学习了 JMP FAR 实现段间跳转,该指令修改了 CS 和 EIP.本节我们学习长调用 CALL FAR,该指令除了修改 CS和EIP,还会修改堆栈. 二.CALL 堆栈图 学 ...
- 7.跨段跳转,短调用和长调用堆栈图
一.回顾 上一节,我们学习了 JMP FAR 实现段间跳转,该指令修改了 CS 和 EIP.本节我们学习长调用 CALL FAR,该指令除了修改 CS和EIP,还会修改堆栈. 二.CALL 堆栈图 学 ...
- Windows保护模式学习笔记(三)—— 长调用/短调用/调用门
Windows保护模式学习笔记(三)-- 长调用/短调用/调用门 要点回顾 长调用与短调用 一.短调用 二.长调用(跨段不提权) 三.长调用(跨段并提权) 长调用执行时: 执行返回(RETF)时: 总 ...
- 09-长调用与短调用
要点回顾: 我们通过JMP FAR可以实现段间的跳转,如果要实现跨段的调用就必须要 学习CALL FAR,也就是长调用. CALL FAR 比JMP FAR要复杂,JMP并不影响堆栈,但CALL指令会 ...
最新文章
- 剑指offer--day07
- saltstack之(十二)配置管理mount
- java struts2模拟百度百科图片中的防盗链设置
- 设计模式之简单工厂模式(静态工厂方法)
- Django 静态资源路径问题(一)
- Python-简单优先队列
- [reference]-ARM/TEE/security等论文中的缩写和参考文献
- python读写修改配置文件(ini)
- 经典C语言程序100例之二二
- java rx.observable_Rxjava2 Observable的条件操作符详解及实例
- 【kafka】 kafka如何设置指定分区进行发送和消费
- SVN Error: “' 'x' isn't in the same repository as 'y' ” during merge (并不在同一个版本库中)...
- 2022电工杯:5G 网络环境下应急物资配送问题(优化)
- 2016年Godaddy最新域名转出教程
- Python实验、Pandas数据处理与分析
- c# winform 无边框窗体 移动办法
- 幼麟棋牌技术分享系列:H5棋牌游戏加载速度优化
- 计算机操作系统 学习笔记(第四版 汤小丹)(上)
- 招行数据岗笔试题- 信用卡推荐客户列表
- win7连win10失败解决方法