首页 > 其他分享 >Call和ret指令

Call和ret指令

时间:2023-04-16 16:25:16浏览次数:27  
标签:压入 -- ip ret 指令 Call call

call 和 ret 指令都是转移指令,都是修改IP,或者同时修改 CS 和 IP

ret指令

利用栈中的数据,修改IP的内容,从而实现近转移

格式 ret(即可)

注意,在使用ret指令后,sp的值会改变,相当于说 pop 掉了一个数据,IP的值是直接被栈中的数据覆盖的。(指向哪,就拿哪的数据)

相当于 pop ip

retf

利用栈中的数据,修改CS和IP的内容,从而实现远转移

格式 retf(即可)

注意,使用retf指令时,第一个从栈中出来的数据是给IP的,第二个是给CS的,相当于pop两次数据

相当于 pop ip 和 pop cs

call指令

(1)将当前的ip 或者 cs和ip 压入栈中
(2)转移(jmp)

call指令不能实现短转移,其实现转移的方法和jmp指令原理相同(即都是依靠位移转移)

格式:

(1)call 标号 --> 将当前的语句的下一条指令的ip压入栈后,转移到标号处执行指令
(2)call far ptr 标号 --> 实现段间转移 --> 先将cs压入栈,再将当前的语句的下一条指令的ip压入栈,然后 cs = 标号的段地址,ip = 标号的偏移地址(jmp far ptr 标号)
(3)call 16位寄存器 --> 将当前的语句的下一条指令的ip 压入栈,后ip = 寄存器里所存的值(jmp 16位寄存器)
(4)call word ptr 内存单元地址 --> 将当前的语句的下一条指令的ip压入栈中,后jmp word ptr 内存单元地址
(6)call dword ptr 内存单元地址 --> 先将当前cs压入栈中,然后将当前的语句的下一条指令的ip压入栈中,后jmp dword ptr 内存单元地址

call 和 ret 的配合使用 --> 构造子程序

标签:压入,--,ip,ret,指令,Call,call
From: https://www.cnblogs.com/TFOREVERY/p/17320956.html

相关文章

  • 转移指令的原理
    转移指令有如下:1.无条件转移指令(如:jmp)2.条件转移指令3.循环指令(如:loop)4.过程5.中断操作符offset(取得标号的偏移地址)jmp指令-->可以只修改IP,也可以同时修改CS和IP(实际是根据位移来转移的指令)怎么计算位移位移:该jmp要跳转到的标号内的第一个指令的偏移地址减去(-......
  • 2023-04-14 Fatal error: Call to a member function fetch_assoc() on a non-object
    问题:php报错。业务场景:使用update语句去更新数据库字段。原因:update接收值不正确。原代码:$query="UPDATEstudentSETdate=now()WHEREid=$id";$result=$mysqli->query($query2)ordie($mysqli->error);//问题出在这$data=$result->fetch_assoc(); i......
  • 2023-04-14 uni-popup 报错:Error in config.errorHandler: "RangeError: Maximum call
    问题描述:首次导入uniapp的uni-popup,在项目中使用时报错,业务场景为:页面渲染完成后显示弹窗。报错:Errorinconfig.errorHandler:"RangeError:Maximumcallstacksizeexceeded"config.errorHandler中的错误:“RangeError:超出了最大调用堆栈大小”页面如下:<uni-popupref="l......
  • getOutputStream() has already been called for this response
    java.lang.IllegalStateException:getOutputStream()hasalreadybeencalledforthisresponse getOutputStream()hasalreadybeencalledforthisresponse问题的解决在jsp向页面输出图片的时候,使用response.getOutputStream()会有这样的提示:java.lang.IllegalStateExcep......
  • Java_procedure with return value(oracle)
    Java调用Oracle中有返回值的存储过程1) 在编写存储过程时,输入参数用in(如果不写默认为in),输出参数用out --编写过程,要求输入雇员编号,返回雇员姓名。 createorreplaceproceduregetNameByNo(noinnumber,nameoutvarchar2)is begin  selectenameintonamefrom......
  • 解决 dpkg 安装出错后的 Sub-process /usr/bin/dpkg returned an error code (1) 错误
    在使用dpkg-i安装.deb软件包的过程中,会出现安装失败的可能。之后无论用sudoaptinstall-forsudaptautoremove等常见的修复命令都是无效的。网络上很多解决方案都直接给出需要运行的命令,不分析原因也不说明理由。我从来不尝试这样的解决方案,除非我自己知道或是只能死马......
  • LightOJ 1348 Aladdin and the Return Journey (树链剖分)
    树链剖分模板题。最近一直有比赛。。好长时间没写了。明显生疏了。。找个模板题熟悉一下。代码如下:#include<iostream>#include<string.h>#include<math.h>#include<queue>#include<algorithm>#include<stdlib.h>#include<map>#include<set>#include......
  • light oj 1007 Mathematically Hard (欧拉函数)
    题目地址:lightoj1007第一发欧拉函数。欧拉函数重要性质:设a为N的质因数,若(N%a==0&&(N/a)%a==0)则有E(N)=E(N/a)*a;若(N%a==0&&(N/a)%a!=0)则有:E(N)=E(N/a)*(a-1)对于这题来说,首先卡MLE。。只能开一个数组。。所以把前缀和也存到......
  • 时间片 线程切换 指令周期 流水线 TPS的初步了解
    时间片线程切换指令周期流水线TPS的初步了解情况说明Redis单线程提供服务,可以支撑十万级别的TPS通过以个非常简单的测试redis-benchmark-c50-n50000pingIntel8369HB3.3Ghz14万TPS阿里倚天7102.7Ghz16万TPSAMD9T343.4Ghz22万TPS可......
  • Linux操作系统ARM指令集与汇编语言程序设计
    一、实验目的1.了解并掌握ARM汇编指令集2.应用ARM指令集编写一个程序操控开发板上的LED灯二、实验要求应用ARM汇编指令集编写程序,实现正常状态下开发板上的LED灯不亮,按下一个按键之后开发板上的LED灯进入流水灯模式。三、实验原理四个LED灯的电路如下图所示:四个按键电路图......