汇编中的跳转

本文总结了汇编语言中的跳转指令,包括相对跳转和绝对跳转。相对跳转涉及JMP和CALL指令,详细解释了它们的字节码结构和计算方式。绝对跳转举例说明了跳转地址的计算过程。
摘要由CSDN通过智能技术生成

  汇编语言中有很多跳转,简单总结一下,以备后用。

  1. 相对跳转:
   JMP远跳,CALL编译成字节码的方法:
   jmp远跳与CALL指令都占5个字节
   JMP 32位目标地址
     E9 + (32位目标地址-下条指令地址)    或者说E9的下一条指令,加上 E9后面的值即为最终跳转目的地
     E9 + (32位目标地址-(当前指令地址+5))
   CALL 32位目标地址
     E8 + (32位目标地址-下条指令地址)
     E8 + (32位目标地址-(当前指令地址+5))
     减法运算直接使用无符号运算,而且遵循结果高高低低的存储规则,CPU自己会把结果当作有符号数来认。
   JMP近跳:
     JMP近跳占2个字节
       EB + (取低8位(32位目标地址-下条指令地址))
       EB + (取低8位(32位目标地址-(当前指令地址+2)))


  2. 绝对跳转

<pre name="code" class="cpp">// x64
000007fe`ff35c4a7 90              nop
ADVAPI32!RegQueryValueExA:
000007fe`ff35c4a8 ff25e2a40500    jmp     qword ptr [ADVAPI32!_
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值