要点回顾:

     我们通过JMP FAR可以实现段间的跳转,如果要实现跨段的调用就必须要

学习CALL FAR,也就是长调用.

CALL FAR 比JMP FAR要复杂,JMP并不影响堆栈,但CALL指令会影响.

1、短调用

指令格式:CALL 立即数/寄存器/内存

发生改变的寄存器:ESP EIP

2、长调用(跨段不提权)

指令格式:CALL CS:EIP(EIP是废弃的)

发生改变的寄存器:ESP EIP CS

3、长调用(跨段并提权)

指令格式:CALL CS:EIP(EIP是废弃的)

发生改变的寄存器:ESP EIP CS SS

4、长调用(跨段并提权)

指令格式:CALL CS:EIP(EIP是废弃的)


发生改变的寄存器:ESP EIP CS SS

5、总结:

  1. 跨段调用时,一旦有权限切换,就会切换堆栈.

  2. CS的权限一旦改变,SS的权限也要随着改变,CS与SS的等级必须一样.

  3. JMP FAR 只能跳转到同级非一致代码段,但CALL FAR可以通过调用门
    提权,提升CPL的权限.

SS与ESP从哪里来?参见TSS段.

6、课后练习:

记住CALL指令执行时的堆栈变化.

09-长调用与短调用相关推荐

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

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

  2. 保护模式(四)长调用与短调用 调用门

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

  3. 段间转移、长调用、短调用

    段间转移不同于段内转移,段间转移同时修改CS:EIP,而段内转移只修改EIP 如JMP FAR 与JMP之间的区别 段间转移 JMP 0x20:0x004183D7 流程             1. ...

  4. 【2021.03.19】长调用与短调用

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

  5. 长调用与短调用 调用门

    cs里的是一个段选择子 1:拆分段选择子,查GDT表 2:该段描述符为系统描述符,s位为0,TYPE为1100,是一个门描述符(DPL必须为3,不然该描述符的权限检查过不去) 3:该描述符的16到31 ...

  6. 10.[保护模式]长调用与短调用

    CALL FAR 长调用最终需要执行的代码由CS段选择子找到的调用门决定的 提权的时候堆栈发生了切换,保留原CS,ESP,SS 返回也是RETF 总结: 1.跨段调用时,一旦有权限切换,就会切换堆栈: ...

  7. [windows内核]长调用与短调用

    相信大家都不陌生call指令了,但除了常见的段内调用(CS当前指向的段)外,还有其他几种不同的调用,手册上说明是有4种,在第 2A 卷: 指令集参考(A-L)中的CALL-Call Procedure ...

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

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

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

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

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

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

最新文章

  1. CentOS7.5常用命令整理
  2. except but
  3. 傅里叶变化的本质:复数的实部和虚部的对应关系
  4. linux~mysql安装、卸载及使用命令
  5. 返回值带头信息 php_PHP注释标记的整理
  6. Python使用redis的消息队列
  7. 数据包格式_理解MQTT协议数据包结构
  8. 解决'pip' 不是内部或外部命令,也不是可运行的程序或批处理文件的问题
  9. Hive中的算术运算符:位运算符解释
  10. 如何创建一个最小的串口、TTY设备包括虚拟控制台,串口以及伪终端设备的驱动程序
  11. PostgreSQL 查看数据库,索引,表,表空间大小
  12. c++_cin.getline()与getline() _getline(cin,str,20)
  13. Linux下安装和卸载jdk步骤详述
  14. 如何在手机浏览器中实现条形码/QR码扫描
  15. Java获取字符串长度(length())
  16. Excel工作日日历
  17. matlab aic sic,请教ADF检验时AIC准则和SIC准则不一致时怎么办?
  18. IEEE Fellow 2019 名单出炉,40 位国内高校学者入选
  19. 锅炉给水泵flash_锅炉给水泵故障实例
  20. android9 apk自动安装功能,如何在Android7.0、8.0、9.0系统下通过Intent安装apk

热门文章

  1. 数据库设计--数据流图(DFD)
  2. 互联网+大赛评审规则浅析
  3. Windows部署Apache服务器步骤
  4. java服务器端集成友盟,Android友盟推送集成
  5. Go语言Web项目搭建
  6. unitTest单元测试
  7. 学习编程语言最好的方法是什么
  8. 计算机毕业设计Java“臻宝”书画竞拍系统(源码+系统+mysql数据库+lw文档)
  9. 互联网晚报 | 10月20日 星期三 | 小米汽车预计2024年量产;阿里发布自研CPU芯片倚天710;《长津湖》票房破50亿元...
  10. Field myFeignClient in com.zkh.controller.FeignController required a bean of type 'com.zkh.feign.MyF