以上有个问题:为什么同样的汇编指令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/

JMP地址公式推导的更多相关文章

  1. 机器码call和jmp地址的计算

    call和jmp都是跳转指令,但是call的同时会把pc地址压入堆栈,并且这两种方式都有远和近跳转.下面的分析不全,因为没有在网上找到足够的资料,个人创造这个情景还是有些困难. 1.例子中的call的 ...

  2. C++继承与派生(原理归纳)

    1.   C++继承与java不同,java遵循单继承,但java的接口为其不足做了很好的弥补了. C++则是灵活的多,为多继承.即一个C++类可以同时继承N个类的属性. 2. 对于继承方式 : 有三 ...

  3. WinDbg调试流程的学习及对TP反调试的探索

    基础知识推荐阅读<软件调试>的第十八章 内核调试引擎 我在里直接总结一下内核调试引擎的几个关键标志位,也是TP进行反调试检测的关键位. KdPitchDebugger : Boolean ...

  4. exploit writing tutorial 阅读笔记总结

    近日阅读Corelan Team编写的exploit writing tutorial系列,大致了解了一下原理,记了一些笔记.此系列文章有中文翻译版,在看雪论坛上发表. 英文版地址:https://w ...

  5. 于PsIsSystemThread无论是在线程系统线程标识获得

    我一直好奇一个进程的所有线程改变线程标志Terminated mov edi, edi ; IoIsSystemThread push ebp mov ebp, esp mov eax, [ebp+a ...

  6. 通过修改EIP寄存器实现远程注入

    功能:通过修改EIP寄存器实现32位程序的DLL注入(如果是64位,记得自己对应修改汇编代码部分) 原理: 挂起目标进程,停止目标进程EIP的变换,在目标进程开启空间,然后把相关的指令机器码和数据拷贝 ...

  7. 通过修改EIP寄存器实现32位程序的DLL注入

    功能:通过修改EIP寄存器实现32位程序的DLL注入 <如果是64位 记得自己对应修改汇编代码部分> 原理:挂起目标进程,停止目标进程EIP的变换,在目标进程开启空间,然后把相关的指令机器 ...

  8. 8088汇编跳转和PSW状态字寄存器

    DDD 8088 汇编跳转 日期:2003年6月12日  出处:嬴政天下整理收藏  作者:看雪  人气: 8735 8088 汇编跳转 一.状态寄存器 PSW(Program Flag)程序状态字寄存 ...

  9. 逆向破解之160个CrackMe —— 001

    CrackMe —— 001 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...

随机推荐

  1. Mybatis-Plus 实战完整学习笔记(一)------简介

    第一章    简介      1. 什么是MybatisPlus                MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只 ...

  2. 第17章:MongoDB-聚合操作--聚合管道--$group

    ①$group 作用:将集合中的文档进行分组,可用于统计结果. 例如: db.scores.aggregate({“$group”:{“_id”:“$studentId”}}); 或者是 db.sco ...

  3. Java EE Servlet 几个path

    ContextPath Context ['kɒntekst] 不识庐山真面目,只缘身在此山中. 相对路径 RealPath 绝对路径 ServletPath 就是servlet-mapping 中 ...

  4. 通用的进程监控脚本process_monitor.sh使用方法

    不用做任何修改,即可用process_monitor.sh监控各种进程. 源码下载:https://github.com/eyjian/libmooon/blob/master/shell/proce ...

  5. 笔记:CSS hack的学习与了解…

    更新时间:2015.05.12 兼容范围: IE:6.0+,FireFox:2.0+,Opera 10.0+,Sarari 3.0+,Chrome 参考资料: 各游览器常用兼容标记一览表: 标记  I ...

  6. MIT Molecular Biology 笔记2 DNA的突变和修复

    视频  https://www.bilibili.com/video/av7973580?from=search&seid=16993146754254492690 教材 Molecular ...

  7. C#-vs2012学习笔记-惊奇于vs的强大和便利

    网站常用功能自动完成,包括网页和数据库.

  8. 判断页面是app打开还是浏览器打开。cookie

    有个需求需要对页面判断不同的打开方式来最里面的链接进行不同调整, 这样就要分四种情况,app,浏览器X安卓系统,苹果系统,起初是对页面url地址带有的参数(安卓)跟用户代理(苹果)返回值判断navig ...

  9. java基础-day25

    第02天 java基础加强 今日内容介绍 u Properties的基本操作 u 反射综合案例 u BeanUtils概述及使用 第1章   Properties的基本操作 1.1  Properti ...

  10. Q他中的乱码再理解

    Qt版本有用4的版本的也有用5的版本,并且还有windows与linux跨平台的需求. 经常出现个问题是windows的解决了,源代码放到linux上编译不通过或者中文会乱码,本文主要是得出一个解决方 ...