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/

  • 相关阅读:
    samba服务器之无认证进入共享目录
    中断
    html里<div> <br /> <p>三者区别
    块级元素和内联元素
    div和span标签
    django添加装饰器
    cookie和session
    Django报错:__init__() missing 1 required positional argument: 'on_delete'
    pycharm创建新django app
    djiango控制语句
  • 原文地址:https://www.cnblogs.com/hongfei/p/3141761.html
Copyright © 2011-2022 走看看