当前位置: 首页 > news >正文

汇编学习之《call, return指令》

call 指令

call 指令就是调用函数的执行,不过它也是几个指令的组合

第一步通过jmp + 函数地址的方式先跳转到函数

第二步通过push 指令将函数地址指令额下一行的指令的地址压入栈中。

我们来验证下

首先打开OllyDbg,导入你的程序,找到一个call 函数,通过F8执行到call函数处,先不要执行函数。

先记住以下几个值(你我的值肯定不一样,只要位置记对可以):

call  函数下一个指令地址:002582e2

当前栈顶数据:  地址:01bbfbf8   值:3149f0b4

接下来通过F7执行,进入函数。

进入函数后可以看到栈顶ESP 寄存器里面的值就是之前call 下面一个指令的函数地址。 同时ESP        栈顶指针地址提升了4个。从01bbfbf8变成了01bbfbf4, 栈顶的值也是之前记录的call下面的一个指令地址002582e2。

这个也好理解,先把函数下一个地址入栈, 接下来执行函数,当函数遇到retn指令的时候出栈到那条指令就可以继续执行了。

持续按F8 直到执行到retn 

这里可以看到栈顶有回到即将执行的指令的地址  002582e2、

最后F8

可以看到,这个就函数的调用整个过程

retn 指令

其实执行的pop eip,就上将栈里面的地址放入到EIP(EIP (Extended Instruction Pointer):  保存cpu 下一次将要执行的代码的地址)

上一篇:汇编学习之《jcc指令》

下一篇:

http://www.dtcms.com/a/107899.html

相关文章:

  • 【前端安全】模板字符串动态拼接HTML的防XSS完全指南
  • 安装IIS 10
  • QML输入控件: RangeSlider的基础用法与样式
  • Flutter中实现中国省份地图
  • dom操作笔记、xml和document等
  • C语言学习笔记
  • 如何平衡元器件成本与性能
  • Day19 -实例:xcx逆向提取+微信开发者工具动态调试+bp动态抓包对小程序进行资产收集
  • React-Markdown详解
  • 解决大小写、保留字与特殊字符问题!Oracle双引号在SQL中的特殊应用
  • 论文阅读笔记:Denoising Diffusion Implicit Models (4)
  • PyTorch 激活函数
  • PyQt5和OpenCV车牌识别系统
  • Java基础 4.2
  • Mysql 在什么样的情况下会产生死锁?
  • Python爬虫第2节-网页基础和爬虫基本原理
  • 2.Linux的权限理解
  • mysql docker容器启动遇到的问题整理
  • 华为面试,机器学习深度学习知识点:
  • Windows C++ 排查死锁
  • MIT6.S081 - Lab6 Copy-on-Write(写时复制)
  • 模拟集成电路设计与仿真 : Mismatch
  • 数据库 第一章 MYSQL基础(4)
  • 《汽车噪声控制》课程作业
  • 英飞凌高信噪比MEMS麦克风驱动人工智能交互
  • Pandas基础及series对象
  • Token是什么?
  • 时序数据库 InfluxDB(六)
  • Python爬虫第一战(爬取优美图库网页图片)
  • *快排延伸-自省排序