zoukankan      html  css  js  c++  java
  • 汇编 JMP 详解

    汇编 JMP 详解

    关键词说明

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

    JMP 的 3 种类型

    1. 短跳转(Short Jmp,只能跳转到256字节的范围内),对应机器码:EB
    2. 近跳转(Near Jmp,可跳至同一段范围内的地址),对应机器码:E9
    3. 远跳转(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

  • 相关阅读:
    「牛客练习赛53A」超越学姐爱字符串
    「CF52C」Circular RMQ
    「Luogu 2367」语文成绩
    「Luogu 1821」[USACO07FEB]银牛派对Silver Cow Party
    「POJ 3268」Silver Cow Party
    「Luogu 1349」广义斐波那契数列
    「CF630C」Lucky Numbers
    「Luogu 3792」由乃与大母神原型和偶像崇拜
    排序机械臂
    P2587 [ZJOI2008]泡泡堂
  • 原文地址:https://www.cnblogs.com/jkcx/p/12005803.html
Copyright © 2011-2022 走看看