首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ret指令call指令的深入理解

在《汇编语言(第3版)》中对这两个指令的概述为: call和ret指令都是转移指令,它们都修改IP,或同时修改CS和IP。它们经常被共同用来实现子程序的设计,也即是调用和返回。...其中ret指令用栈中的数据,修改IP的内容,实现近转移。而call指令将IP或者CS和IP压入栈中,实现转移。还有retf指令,用栈中的数据,修改CS和IP的内容,实现远转移。...ret指令call指令实现了什么功能? 1、ret指令用栈中的数据,修改IP的内容,返回代码段的第一条指令。相当于 pop IP 2、call指令将IP或者CS和IP压入栈中,实现转移。...在子程序需要被执行的时候用call指令去调用。...当子程序执行完后,由于call指令后面的指令的地址已经存储在栈中( push操作), 使得在子程序后面再使用ret指令时候,栈中的数据会设置IP内的值, IP内的值的设置实现了CPU继续执行call指令后面的代码指令

4.2K20
您找到你想要的搜索结果了吗?
是的
没有找到

汇编语言中的call指令和ret指令

call指令是调用函数的意思,让处理器从新的内存地址开始执行,过程使用RET来返回,让处理器回到调用点上。 call会将返回地址压入堆栈,然后再将要被调用的地址复制到IP寄存器里。...当RET指令被执行的时候,就会从堆栈中弹出返回地址到IP寄存器内。 调用和返回示例 假设在 main 过程中,CALL 指令位于偏移量为 0000 0020 处。...通常,这条指令需要 5 个字节的机器码,因此,下一条语句(本例中为一条 MOV 指令)就位于偏移量为 0000 0025 处: main PROC 00000020 call MySub 00000025...ret MySub ENDP 当 CALL 指令执行时如下图所示,调用之后的地址(0000 0025)被压入堆栈,MySub 的地址加载到 EIP。...执行 MySub 中的全部指令直到 RET 指令。当执行 RET 指令时,ESP 指向的堆栈数值被弹岀到 EIP(如下图所示,步骤 1)。

1K40

(十)汇编语言——CALL和RET指令

(十)汇编语言——CALL和RET指令 文章目录 (十)汇编语言——CALL和RET指令 CALL指令 功能 寄存器 内存 段间转移 返回指令 ret retf 实例 MUL指令 模块化程序设计...CALL指令 这个CALL指令呢,我们是第一次接触,它主要的作用就是调用子程序,实质上就是进行流程转移,而且实现转移的方法和jmp指令的原理相似。...push IP jmp 16位寄存器 内存 转移地址在内存中的call指令其实也是类似的,我们给出相应的语句,相信大家可以很清楚的理解到。...而指令call far ptr 标号”实现的是段间转移! 返回指令 我们这里主要介绍ret指令和retf指令。...聪明的小伙伴们应该想到了,调用我们刚刚介绍的CALL 指令和RET指令即可。但是呢,需要我们去解决两个问题,那就是参数和返回值的问题,我们来看一下这两个问题我们如何来解决。

87930

【Android 逆向】x86 汇编 ( call 子函数调用指令 | jmp 跳转指令 | lea 加载指令 | mov 数据传送指令 )

文章目录 一、call 子函数调用指令 二、jmp 跳转指令 三、lea 加载指令 四、mov 数据传送指令 总结 一、call 子函数调用指令 ---- call 指令是 子函数调用指令 , 调用的指令的下一条指令地址入栈..., 会自动跳转到 子函数 目标地址中 , 该地址可能存储在寄存器中 , 也可能是一个常量 ; 二、jmp 跳转指令 ---- jmp 跳转指令 , 默认情况下是无条件跳转 ; 如果想要附加条件跳转 ,...---- lea 指令 : Load Effect Address 取地址值 , 将 数据地址 加载到 寄存器 中 , 方便进行批量数据处理 , 如批量复制 , 批量修改 ; 四、mov 数据传送指令...---- mov 指令是数据传送指令 ; mov a1 , a2 指令的作用是 , 将 a2 中的值写入到 a1 中 ; 总结 ---- align 字节对齐 , db 声明字符 / 字符串 , nop...空指令 cmp 比较 , test 比较 call 子函数调用指令 , jmp 跳转指令 ( 可选参数 a , b , c , g , l , o , p , s , z , e , n) lea

1.3K10

用site指令查看网站收录情况

为什么使用site指令查看网站收录情况,因为site指令能够帮助我们详细分析网站在搜索结果页(英语:Search engine results page,SERP)展示的情况。...现在我们开启谷歌SEO的第一步使用site指令查看网站收录情况。 使用site指令查看网站收录情况 ?...此指令查看竞争对手网站收录情况,也是最常用的分析竞争对手网站的方法,查看竞争对手网站的收录情况,竞争对手网站在搜索结果页面中展示情况。 ?...使用site指令查看特定关键词的收录 在谷歌搜索输入框输入site:amazon.com "free kindle books",结果展示约有 38,100,000 项。...根据上述site指令组合查看展示出来的搜索结果,根据搜索结果来分析那些内容我们可以控制,那些内容我们不知道,或者至少哪些是不能通过SEO获得搜索流量。

2.9K20

快速学习-Linux文档的查看指令

3、文档的查看指令 3.1、tail指令 作用:查看一个文件的末n行 语法:#tail -n 文件的路径 说明:-n可以不写,不写,默认表示10行。...案例:使用tail指令查看root/install.log文件的末5行和末10行 # tail -5 /root/install.log # tail /root/install.log ?...3.2、head指令 作用:查看文件的头n行 语法:#head -n 文件的路径 注意:如果不指定-n则默认头10行 案例:使用head指令查看root/install.log文件的头5行和头10行...3.3、cat指令(重点) 作用:查看某个文件的全部内容(将内容全部输出在命令行中)【正序】 语法:#cat 文件路径1 文件路径2 文件路径3 … 案例:使用cat指令输出install.log...文件内容 #cat /root/install.log 3.4、tac指令 作用:查看某个文件的全部内容(倒序的) 语法:#tac 文件路径1 文件路径2 文件路径3… 案例:使用tac指令输出

1.3K20

mysql查看版本sql_linux查看mysql版本

【使用命令行查看mysql版本-直接查看】:在命令行输入“mysql–version",按”Enter“键即可....【使用命令行查看mysql版本-mysql变量查看】:在命令行输入“mysql",按”Enter“进入mysql命令行模式,输入”showvariableslike’version’;“即可....【在wamp查看】:点击wampserver,选择”mysql“子目录”version“即可....status可以看到 1、使用-V参数首先我们想到的肯定就是查看版本号的参数命令,参数为-V(大写字母)或者–version使用方法:D:\xampp\mysql\bin>mysql-V或者D:\xampp...\mysql\bin> 查看mysql版本方法一:status;方法二:selectversion(); 一般情况下,mysql会默认提供多种存储引擎,你可以通过下面的查看:看你的mysql现在已提供什么存储引擎

20.9K10

Mysql常用基础指令

| | performance_schema | | test | +--------------------+ 2.4 查看相关操作指令 查询有几个库...: show databases; 切换库: use mysql; 查看库里的表: show tables; 查看tb_name这个表里的字段: desc tb_name; 查看tb_name这个表是如何创建的语句...查看当前登录的用户: select user(); 查看当前使用的数据库: select databsase(); ---- 其实在mysql环境中我们也可以使用上下键去翻看历史,其实在根目录我们是可以找到这个历史文件的...查看队列(类似于在linux 中使用ps或者top): show processlist; 查看完整的INFO show full processlist; 作为一个运维,其实用的最多的就是最后一条指令...---- 扩展:mysql5.7之root密码更改: mysql5.7root有默认密码,必须重设密码后,才能进行mysql的操作,以下是设置root密码的步骤: 一、查看默认密码 [[email protected

1.1K50
领券