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/

  • 相关阅读:
    TweenMax_API介绍
    正则表达式基础讲解
    CSS3 calc()的使用
    WebGL框架 -- three.js
    CSS3 box-sizing属性
    prefixfree.js_无前缀脚本
    css样式—字体垂直、水平居中
    JQuery解析json数据
    移动Web开发规范
    Ajax与json在前后端中的细节解惑
  • 原文地址:https://www.cnblogs.com/hongfei/p/3141761.html
Copyright © 2011-2022 走看看