zoukankan      html  css  js  c++  java
  • JMP地址公式推导

    以上有个问题:为什么同样的汇编指令JMP 12345678却对应不同的机器码呢?
    首先,机器码E9表明这是一个近跳转(Near Jmp)
    这里需要补充下相关知识:
    JMP分3种:
    ①短跳转(Short Jmp,只能跳转到256字节的范围内),对应机器码:EB
    ②近跳转(Near Jmp,可跳至同一段范围内的地址),对应机器码:E9
    ③远跳转(Far Jmp,可跳至任意地址),对应机器码: EA
    短跳转和近跳转指令中包含的操作数都是相对于(E)IP的偏移。
    远跳转指令中包含的是目标的绝对地址。
    所以短/近跳转会出现跳至同一目标的指令机器码不同,不仅会不同,而且应该不同。
    而远跳转中包含的是绝对地址,因此转移到同一地址的指令机器码相同 。
    至此,我们知道了跳转指令所对应的机器码根据E(IP)计算出来的,那到底是怎么计算的呢?
    比如:
    上图的第一条指令:01007568    - E9 0BE13311   JMP 12345678
    此时的EIP=01007568
    12345678- 01007568  =  1133E110 这里只是指向当前指令的EIP处,实际计算跳转地址要去掉当前指令的长度,当前的跳转指令需要5个字节,  1133E110  -5= 1133E10B
    注意颠倒顺序,高位在后

    原创文章,转载请注明出处:http://www.cnblogs.com/hongfei/

  • 相关阅读:
    es学习-java操作 2.4.0版本
    es学习-基础增删改查
    mongodb 查询条件
    mongodb-查询
    mysql 性能优化
    mysql 存储过程学习(总)
    MySQL 存储过程 -流程控制的使用
    MySQL 存储过程 -光标的使用
    maven的聚合和继承
    mavean的依赖传递和排除依赖
  • 原文地址:https://www.cnblogs.com/hongfei/p/3141761.html
Copyright © 2011-2022 走看看