转移指令jmp和跳转指令call
【-1】写在前面
以下内容文字描述来自于 王爽老师的《汇编语言》教材,建议大家都买一本,哈哈。不是我打广告,确实人家写的好,应该支持。我只是附上了自己的图片和理解而已。
【0】先上干货
只修改ip,称为段内转移,如jmp ax
修改cs和ip,称为段间转移,如 jmp 1000:0
【1】分类
转移指令分为:
无条件转移,如jmp
条件转移
循环指令, loop
过程
中断
【2】我们的jmp
2.1 )jmp short 标号(转到标号处执行指令)
对ip的修改范围在-128~127;
[attention] : cpu在执行jmp指令时,并不需要转移的目的地址, 而是包含转移的位移;
2.2) jmp near ptr 标号
它实现的是段内近转移, 只不过对ip的修改范围在 -32768~32767;
2.3)jmp far ptr 标号
它实现的是段间转移,又称远转移; far ptr 指明了指令用标号的段地址和偏移地址修改cs和ip;
2.4)转移地址在内存中
2.4.1)jmp word ptr 内存单元地址(段内转移)
function:从内存单元地址处开始存放一个字,是转移的目的偏移地址;
如,mov ax,0123h mov [bx], ax jmp word ptr [bx] 执行后, (ip) = 0123h
2.4.2)jmp dword ptr 内存单元地址(段间转移)
功能:内存中存放两个字,高地址处的字存放转移的目的段地址;低地址处存放目的偏移地址;
(cs) = 内存单元地址 + 2
(ip) = 内存单元地址
如:mov ax,0123h mov ds:[0], ax mov word ptr ds:[2],0 jmp dword ptr ds:[0] 执行后, (cs) = 0; (ip) = 0123h 。
[Complementary]
MOV AX, WORD PTR [BX] ; 要有逗号
将DS:BX指向的内存地址中的16位数读到AX里面。
MOV是数值传送指令,AX是目的操作数,WORD PTR表示后面的储存单元是字类型,[BX]表示用BX的值来寻址,默认段地址是DS的值。
【3】我们的call
3.0)谈谈ret和retf
3.0.1)执行ret 相当于执行:
(ip) = (ss) * 16+ (sp); (sp) = (sp) + 2;
3.0.2)执行retf, 相当于执行:
(ip) = (ss) * 16+ (sp) ; (sp) = (sp) + 2 ; cs = ss * 16 + sp ; sp = sp + 2 ;
3.0.3)执行ret,相当于执行 pop IP
3.0.4)执行retf,相当于执行 pop IP; pop CS
(所以retf 返回的时候要先将cs压栈)
3.1)依据位移进行转移的call 指令
相当于——将当前的IP或CS和IP压入栈,然后转移;
call指令除了不能实现短转移之外,其他和jmp相同;
3.1.1)cpu执行call时,相当于进行:
push ip jmp near ptr 标号
3.1.2)also, 相当于:
sp = sp - 2 ss *16 +sp = ip ip = ip + 16位位移
3.2)转移的目的地址在指令中的call指令
call far ptr 标号实现的是段间转移;
3.2.1)cpu 执行call far ptr 标号时,相当于进行
push cs push ip jmp far ptr 标号
3.2.2)also 相当于
sp = sp - 2 ss * 16 + sp = cs sp = sp - 2 ss * 16 + sp = ip cs = 段基地址 ip = 偏移地址
3.3)转移地址在register中的call指令
指令格式:call 16为reg
功能:
sp = sp -2
ss * 16 + sp = ip
ip = 16位regalso 相当于
push ip
jmp 16位reg
3.4)转移地址在内存中的call指令
3.4.1)call word ptr 内存单元地址
相当于push ip jmp word ptr 内存单元地址
3.4.2)call dword ptr 内存单元地址
相当于:push cs push ip jmp dword ptr 内存单元地址
转移指令jmp和跳转指令call相关推荐
- 014-无条件跳转指令jmp+
l 无条件跳转指令jmp l goto指令 l 优化后的指令 l 标志寄存器PSW 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OF DF IF T ...
- 【Android 逆向】函数拦截实例 ( ② 插桩操作 | 保存实际函数入口 6 字节数据 | 在插桩的函数入口写入跳转指令 | 构造拼接桩函数 )
文章目录 前言 一.函数拦截需要的几个参数 二.插桩前先保存实际函数入口 6 字节数据 三.在插桩的函数入口写入跳转指令 | 构造拼接桩函数 前言 [Android 逆向]函数拦截实例 ( 函数拦截流 ...
- arm64汇编b带条件跳转指令和bl跳转带返回ret指令
文章目录 ret返回指令 B 跳转指令 BL 带返回的跳转指令 B指令可以接上后缀,用来和cmp比较后待条件的跳转 ret返回指令 cpu遇到ret之后,会把lr赋值给pc,这样cpu执行了pc里的地 ...
- ARM汇编:汇编语言跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等
跳转指令分三类: 一.无条件跳转: JMP; 二.根据 CX.ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转).JECXZ(ECX 为 0 则跳转); 三.根据 EFLAGS 寄存器的标志位 ...
- 汇编跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等
转自:http://www.cnblogs.com/del/archive/2010/04/16/1713886.html http://pan.baidu.com/s/1gVTSi 跳转指令分三类: ...
- 学 Win32 汇编[28] - 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等...
跳转指令分三类: 一.无条件跳转: JMP; 二.根据 CX.ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转).JECXZ(ECX 为 0 则跳转); 三.根据 EFLAGS 寄存器的标志位 ...
- 【debug】汇编跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等
汇编跳转指令: JMP.JECXZ.JA.JB.JG.JL.JE.JZ.JS.JC.JO.JP 等 2017年11月12日 15:01:09 zmmycsdn 阅读数 19334 转自:http:// ...
- 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等
跳转指令分三类: 一.无条件跳转: JMP; 二.根据 CX.ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转).JECXZ(ECX 为 0 则跳转); 三.根据 EFLAGS 寄存器的标志位 ...
- 汇编语言跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等
跳转指令分三类: 一.无条件跳转: JMP; 二.根据 CX.ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转).JECXZ(ECX 为 0 则跳转); 三.根据 EFLAGS 寄存器的标志位 ...
最新文章
- 记一次mpvue开发完整小程序相关笔记
- 从HTML页面重定向
- windows相关知识点分析
- @ResponseBody//该注解会将返回值转为json格式并放到响应体中返回到前台
- linux文本处理脚本题,Linux文本处理工具sed练习题
- js用递归遍历多维数组_JavaScript树结构操作:查找、遍历、筛选、树结构和列表结构相互转换...
- Redis系统管理相关指令简介
- 桃李春风一杯酒,江湖夜雨十年灯
- 调查作业时,注意 【 调查深度 】 ,以及总结 【 中间成果物 】
- Java 四种权限修饰符
- 为什么正常单据记账没有数据_正常单据记账中找不到记账单据
- H3C防火墙透明模式部署trunk
- 汇编c语言基础教程编程达人,编程达人 《汇编、C语言基础教程》第一章 进制1.6 逻辑运算(连载)...
- 我的 iPhone XS Max 终于装上了这款高逼格数字时钟,优秀不优秀?!
- zookeeper和kafka的SASL认证以及生产实践
- 阿里云购买域名到icp备案
- [conda] 利用conda安装本地包
- 微信小程序 - 如何利用百度飞桨实现图像分类识别
- 神经网络模型 基本概念 一文看懂
- python技术介绍_Python介绍
热门文章
- 杜教BM模板(用于求线性递推公式第N项)
- [AtCoder Regular Contest 124E] Pass to Next(dp+数学)
- 2021牛客NOIP提高组第二场T2——方格计数(组合数计数)
- CF1406E:Deleting Numbers(构造、根号分块)
- 欢乐纪中某A组赛【2019.7.6】
- ssl提高组周六模拟赛【2018.9.22】
- 【2018.4.14】模拟赛之二-ssl2392 蚂蚁【图论】
- K8S Learning(7)—— Deployment
- 微服务为什么选Spring Cloud
- 【git】如何在github上推送并部署自己的项目