博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
汇编中的call和ret
阅读量:5250 次
发布时间:2019-06-14

本文共 520 字,大约阅读时间需要 1 分钟。

反汇编经常看到的CALL指令的基本格式如下:

CALL   地址1

功能:调用地址1处的子程序

 

CALL指令分为两种情况,一种是段内转移;另一种是段间转移。(这里的“段”指PE文件的.text,.data映射在内存中以虚拟地址的方式呈现)

在CALL指令进行的是段内转移的情况时,跟在CALL后面的地址1为一个相对位移;而CALL指令进行的是段间转移的情况时,跟在CALL后面的地址1为一个绝对内存地址。

 

 

段内转移的CALL指令等价于两条指令:

  push eip
  jmp   目的位置

RETN指令用于从段内转移CALL进的子程序中返回:

  RETN   操作数  

 (等价于一条指令:POP   eip,然后执行ESP=ESP+操作数)

 

段间转移的CALL指令等价于三条指令:

  push CS
  push eip
  jmp   目的位置

RETF指令用于从段间转移CALL进的子程序中返回:

  RETF   操作数  

 (等价于两条指令:POP   eip

          POP   CS ,然后执行ESP=ESP+操作数 )
  

转载于:https://www.cnblogs.com/mo-cuishle/p/3410975.html

你可能感兴趣的文章
codeforces水题100道 第二十二题 Codeforces Beta Round #89 (Div. 2) A. String Task (strings)
查看>>
c++||template
查看>>
[BZOJ 5323][Jxoi2018]游戏
查看>>
条件断点 符号断点
查看>>
Python Web框架Django (五)
查看>>
.net学习之继承、里氏替换原则LSP、虚方法、多态、抽象类、Equals方法、接口、装箱拆箱、字符串------(转)...
查看>>
python的多行注释
查看>>
连接Oracle需要jar包和javadoc文档的下载
查看>>
UVA 10976 - Fractions Again?!
查看>>
Dreamweaver cc新版本css单行显示
查看>>
【android】安卓的权限提示及版本相关
查看>>
JavaScript可否多线程? 深入理解JavaScript定时机制
查看>>
IOS基础学习
查看>>
Java基础教程——网络基础知识
查看>>
Kruskal基础最小生成树
查看>>
浅谈算法和数据结构: 一 栈和队列
查看>>
【hdu 1429】胜利大逃亡(续)
查看>>
图论-次短路求法
查看>>
What's New for Visual C# 6.0
查看>>
ExtJs学习笔记之ComboBox组件
查看>>