我是靠谱客的博主 单薄奇异果,最近开发中收集的这篇文章主要介绍汇编 JMP使用详解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

汇编 JMP 详解关键词说明

RVA: 相对虚拟地址(Relative Virtual Address),在内存中相对于PE文件装入地址的偏移位置,是一个相对地址。

JMP 的 3 种类型

  • 短跳转(Short Jmp,只能跳转到256字节的范围内),对应机器码:EB
  • 近跳转(Near Jmp,可跳至同一段范围内的地址),对应机器码:E9
  • 远跳转(Far Jmp,可跳至任意地址),对应机器码: EA

短跳转 和 近跳转 指令中包含的操作数都是相对于(E)IP的偏移。

远跳转指令中包含的是目标的绝对地址。

所以短/近跳转会出现跳至同一目标的指令机器码不同,不仅会不同,而且应该不同。

而远跳转中包含的是绝对地址,因此转移到同一地址的指令机器码相同 。

至此,我们知道了跳转指令所对应的机器码根据E(IP)计算出来的,那到底是怎么计算的呢?

JMP 目标地址计算方式

目标地址 = 当前指令地址 + 指令长度 + RVA

举例说明

如图: 想要从 001392DB 处跳转到 001392E1 这个地址,那么E9后面应该跟多少呢?

RVA = 001392E1 - 001392DB - 5

在计算机中使用上面的公式计算结果就是 RVA = 1 所以后面应该是跟 E9 01 00 00 00
其中 5 是指令长度 E9 后面需要跟 4 字节的地址,所以指令(1)+地址(4) = 5

ps: 如果计算结果是负数,则数值后面应该用 FF 填充,如负一则应该用 E9 01 FF FF FF

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持靠谱客。

最后

以上就是单薄奇异果为你收集整理的汇编 JMP使用详解的全部内容,希望文章能够帮你解决汇编 JMP使用详解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(96)

评论列表共有 0 条评论

立即
投稿
返回
顶部