一、回顾

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

二、CALL 堆栈图

学习长调用之前,不妨先回顾一下短调用CALL的堆栈图:

三、CALL FAR 堆栈图

CALL FAR 和 RETF 一般是成对的,RETF 的执行流程(权限控制)和 CALL FAR 是一样的,所以下面的堆栈图我就不画 RETF 了。

CALL FAR 不提权
3环跳转到另一个3环代码段,不会切换堆栈。

CALL FAR 提权
从3环跳转到0环,此过程发生堆栈替换。

长调用的指令格式是这样的:

CALL  CS:EIP(EIP是废弃的)

EIP是废弃的,所有信息都根据CS获取,这个CS是段选择子,指向GDT表中的一个特殊的“段”,这个特殊的“段”叫调用门。在提权长调用中,0环堆栈除了返回地址,调用者CS以外,还压入了调用者的SS和ESP,这部分数据是从TSS段中获取的。关于调用门和TSS段的知识,请看后续博客。

四、小结

本节我们需要记住长调用的堆栈图,为后续学习调用门和TSS打下基础。
下面是本节的总结:

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

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

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

(9)跨段跳转,短调用和长调用堆栈图相关推荐

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

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

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

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

  3. [保护模式]段间跳转和跨段跳转

    文章目录 段间跳转 段寄存器 段间跳转 段间跳转的执行流程 1.段选择子拆分 2.查表得到段描述符 3.权限检查 4.加载段描述符 5.代码执行 总结 跨段跳转 短调用 长调用 跨段不提权 跨段提权 ...

  4. Windows保护模式学习笔记(二)—— 代码跨段跳转

    Windows保护模式学习笔记(二)-- 代码跨段跳转 要点回顾 代码跨段跳转 执行流程 1)段选择子拆分 2)查表得到段描述符 3)权限检查 4)加载段描述符 5)代码执行 6)总结 一致代码段(共 ...

  5. 段、GDT、调用门学习笔记

    保护模式 什么是保护模式 x86 CPU的3个模式:实模式.保护模式.虚拟8086模式. AMD64与Intel64 AMD在1999年的时候拓展了这套指令集,成为x86-64后改名叫AMD64,AM ...

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

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

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

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

  8. 09-长调用与短调用

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

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

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

最新文章

  1. mysql or的效率_Mysql比较exists与in以及or的效率分析
  2. 皮一皮:别人家的老公...
  3. Linux打开txt文件乱码的解决方法
  4. Java1.7之后Arrays.sort对数组排序DualPivotQuicksort.sort
  5. java序列化(六) - protostuff序列化
  6. win7_FTP服务器配置教程_IIS
  7. 《.NET WEB服务》 (二)
  8. 客户机容易随机出现自动重启、游戏卡问题?不妨优化下BIOS中节能技术!
  9. C#_delegate EndInvoke
  10. 缠论108课_缠论108课学习顺序
  11. SEM和SEO有什么区别,哪种更好一些
  12. 理解标准差、标准化、协方差、正态分布
  13. 常见排序算法02之插入排序与希尔排序
  14. 恢复微信撤回的图片(不容root,极其简单)
  15. Codeforces Round #552 (Div. 3) E stl模拟 F dp G gcd
  16. Junit、Json和kv结构的相互转化
  17. atlas mysql怎么用,MySQL —— Atlas 使用
  18. 获奖感言和C语言的学习心得
  19. 新手村 - 第四站,认识成交量
  20. win8 java不是内部或外部命令_win8系统运行java提示“ava不是内部或外部命令两种解决方法...

热门文章

  1. 再次携号转网_“携号转网”日期再次确定!这三个开头的号码,可以优先办理转网...
  2. 成功解决Ignoring invalid distribution -yqt5
  3. 成功解决Both binary classification-only and multiclassification-only loss function or metrics specified
  4. Python编程语言学习:python的列表的特殊应用之一行命令实现if判断中的两类判断
  5. 成功解决ModuleNotFoundError: No module named 'torch.utils.tensorboard'
  6. ML之Xgboost:利用Xgboost模型(7f-CrVa+网格搜索调参)对数据集(比马印第安人糖尿病)进行二分类预测
  7. HighNewTech—AI界消息:2019年3月,贾扬清(Caffe框架作者)被曝从Facebook离职,入职Alibaba硅谷研究院
  8. Paper:论文解读《Adaptive Gradient Methods With Dynamic Bound Of Learning Rate》中国本科生提出AdaBound的神经网络优化算法
  9. 5.5 function
  10. 对象化下的编程——字段