段间转移不同于段内转移,段间转移同时修改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段

段间转移、长调用、短调用相关推荐

  1. 【汇编】转移指令——offset 标号、jmp无条件转移,段内/段间转移区别、段内近转移/段内短转移、jcxz指令、loop指令

    多种转移指令详解 9.1 转移 综述 9.2 offset 标号 9.3 jmp指令 段内/段间转移区别 段内短转移与近转移 jmp小结 9.4 jcxz 9.5 loop 9.1 转移 综述 转移按 ...

  2. 代码段间转移控制时的特权级检查(JMP/CALL)——《x86汇编语言:从实模式到保护模式》读书笔记28

    代码段间转移控制时的特权级检查(JMP或者CALL指令) 在保护模式下,JMP或CALL指令可以用以下四种方法之一来引用另外一个代码段: 1. 目标操作数含有目标代码段的段选择子和偏移 2. 目标操作 ...

  3. Windows保护模式(三)长调用与短调用调用门

    长调用与短调用 短调用 指令格式 CALL 立即数 / 寄存器 / 内存 堆栈变化 发生改变的寄存器 ESP EIP 长调用(跨段不提权) 指令格式 CALL CS:EIP(如果是通过调用门则 EIP ...

  4. 什么是段错误,段内,段间

    https://zhidao.baidu.com/question/447013382.html 段错误:指访问的内存超出了系统所给这个程序的内存空间. 汇编语言的程序设计是分4个段来设计的,即用来放 ...

  5. (9)跨段跳转,短调用和长调用堆栈图

    一.回顾 上一节,我们学习了 JMP FAR 实现段间跳转,该指令修改了 CS 和 EIP.本节我们学习长调用 CALL FAR,该指令除了修改 CS和EIP,还会修改堆栈. 二.CALL 堆栈图 学 ...

  6. [转](9)跨段跳转,短调用和长调用堆栈图

    一.回顾 上一节,我们学习了 JMP FAR 实现段间跳转,该指令修改了 CS 和 EIP.本节我们学习长调用 CALL FAR,该指令除了修改 CS和EIP,还会修改堆栈. 二.CALL 堆栈图 学 ...

  7. 7.跨段跳转,短调用和长调用堆栈图

    一.回顾 上一节,我们学习了 JMP FAR 实现段间跳转,该指令修改了 CS 和 EIP.本节我们学习长调用 CALL FAR,该指令除了修改 CS和EIP,还会修改堆栈. 二.CALL 堆栈图 学 ...

  8. Windows保护模式学习笔记(三)—— 长调用/短调用/调用门

    Windows保护模式学习笔记(三)-- 长调用/短调用/调用门 要点回顾 长调用与短调用 一.短调用 二.长调用(跨段不提权) 三.长调用(跨段并提权) 长调用执行时: 执行返回(RETF)时: 总 ...

  9. 09-长调用与短调用

    要点回顾: 我们通过JMP FAR可以实现段间的跳转,如果要实现跨段的调用就必须要 学习CALL FAR,也就是长调用. CALL FAR 比JMP FAR要复杂,JMP并不影响堆栈,但CALL指令会 ...

最新文章

  1. 剑指offer--day07
  2. saltstack之(十二)配置管理mount
  3. java struts2模拟百度百科图片中的防盗链设置
  4. 设计模式之简单工厂模式(静态工厂方法)
  5. Django 静态资源路径问题(一)
  6. Python-简单优先队列
  7. [reference]-ARM/TEE/security等论文中的缩写和参考文献
  8. python读写修改配置文件(ini)
  9. 经典C语言程序100例之二二
  10. java rx.observable_Rxjava2 Observable的条件操作符详解及实例
  11. 【kafka】 kafka如何设置指定分区进行发送和消费
  12. SVN Error: “' 'x' isn't in the same repository as 'y' ” during merge (并不在同一个版本库中)...
  13. 2022电工杯:5G 网络环境下应急物资配送问题(优化)
  14. 2016年Godaddy最新域名转出教程
  15. Python实验、Pandas数据处理与分析
  16. c# winform 无边框窗体 移动办法
  17. 幼麟棋牌技术分享系列:H5棋牌游戏加载速度优化
  18. 计算机操作系统 学习笔记(第四版 汤小丹)(上)
  19. 招行数据岗笔试题- 信用卡推荐客户列表
  20. win7连win10失败解决方法

热门文章

  1. DC入门(一)综合基础
  2. css 实现字体中画一横线
  3. 添加系统调用的方法,2.6.35(没有测试)
  4. UNCTF2022-公开赛|Crypto
  5. 关于浏览器极速模式怎么设置
  6. C语言笔记——题目“股神”
  7. insert用法(插入表内容)
  8. 俩个PC机通过串行口互联,实现件的无差错传输。程序必须用中断方式来完成任务
  9. FMDB - 数据库操作
  10. SQL Server Intergration Services(SSIS)