od随便打开一个记事本,汇编几条jmp指令,可以看到如下
地址           HEX              反汇编
010073B4     - E9 7B9E8787      JMP 88881234
010073B9     - E9 769E8787      JMP 88881234
010073BE     - E9 719E8787      JMP 88881234
010073C3     - E9 6C9E8787      JMP 88881234
010073C8     - E9 679E8787      JMP 88881234
010073CD     - E9 629E8787      JMP 88881234
010073D2     - E9 5D9E8787      JMP 88881234
010073D7     - E9 589E8787      JMP 88881234
010073DC     - E9 539E8787      JMP 88881234
010073E1     - E9 4E9E8787      JMP 88881234
010073E6     - E9 499E8787      JMP 88881234
可以看到同样的汇编指令,在不同的地址上的机器码不一样。
有啥关系呢?看第一条:88881234-010073b4=87879e80
这个值跟E9后面的那个值差了5(E9后面那个值要反过来看,因为X86是大端模式)

同样这个规律也使用与后面几条。

为什么呢?
下面摘录一个网上的

直接的jmp分3种 
Short Jump(短跳转)机器码 EB rel8 
只能跳转到256字节的范围内 
Near Jump(近跳转)机器码 E9 rel16/32 
可跳至同一个段的范围内的地址 
Far Jump(远跳转)机器码EA ptr 16:16/32 
可跳至任意地址,使用48位/32位全指针 
要注意的是,短跳转和近跳转指令中包含的操作数都是相对于(E)IP的偏移,而远跳转指令中包含的是目标的绝对地址,所以短/近跳转会出现跳至同一目标的指令机器码不同,不仅会不同,而且应该不同。而远跳转中包含的是绝对地址,因此转移到同一地址的指令机器码相同 
下面的指令是这样计算偏移的. 
004A2FCE    ^ E9 072BFEFF   jmp     00485ADA 
                 ======== 
485ADA-4A2FCE=  FFFE2B0C  这里只是指向当前指令的IP处,实际计算跳转地址要去 
掉当前指令的长度,当前的跳转指令需要5个字节,FFFE2B0C-5=FFFE2B07

我们一般就用E9了,所以计算公式就是 要跳转的地址-指令所在的位置-5=机器码
当然 如果我们要在内存中写的话,肯定是写机器码的。也就是也E9 机器码。

结合上面的博文,可以在被HOOK的地址出写入JMP指令跳回到原来的地方,
被HOOK的地址-原来地址-5 = 机器码(这个就是要写入到 被HOOK地址的地方)
为什么不直接修改SSDT表,因为很多程序都会循环去看又没有被改回来,又会被修改回去。

jmp指令对应的机器码相关推荐

  1. Linux中jmp指令,jmp指令对应的机器码

    短跳转和近跳转指令中包含的操作数都是相对于(E)IP的偏移,而远跳转指令中包含的是目标的绝对地址,所以短/近跳转会出现跳至同一目标的指令机器码不同,不仅会不同,而且应该不同.而远跳转中包含的是绝对地址 ...

  2. jmp指令的机器码编写

    1.首先直接的jmp分3种  :      Short Jump(短跳转)机器码 EB rel8             只能跳转到256字节的范围内       Near Jump(近跳转)机器码 ...

  3. 转移的目的地址在指令中的jmp指令 转移地址在寄存器中的jmp指令

    机器码中并没有包含转移的目的地址,只是给了一个位移的范围,通过位移的方式,实现对ip寄存器的修改. 转移的目的地址在机器码中的jmp指令 jmp far ptr s 转移的目的地址在寄存器中的jmp指 ...

  4. 操作符offset 和 jmp指令

    转移指令的原理 转移指令:可以修改IP或者同时修改CS和IP的指令(jmp.loop.call) 总的来说,转移指令就是可以控制CPU执行内存中某处代码的指令. 8086的转移行为有一下几类: 只修改 ...

  5. JMP指令转换公式推导

    看完郁金香第020课总结: 同样的一句指令 JMP 88881234在不同位置有以下现象 找规律: 88881234 - 010073bb = 87879E79 88881234 – 010073c0 ...

  6. 贺利坚老师汇编课程47笔记:jmp指令无条件转移只修改IP

    指路老师的博客 JMP指令的功能 无条件转移,可以只修改IP,也可以同时修改CS和IP(段间转移) JMP指令要给出的信息 转移的目的地址 转移的距离 JMP 2000:1000;段间转移(远转移) ...

  7. jmp指令【原理详解 8086汇编语言+笔记】

    笔记目录 jmp指令原理详解篇(无条件转移指令) 1 初步理解 2 jmp指令格式(小总结) 3 jmp指令本质-详解 3.1 引子 3.2 jmp short 标号(jmp short s为例) 怎 ...

  8. 汇编语言--jmp指令

    jmp为无条件转移,转到标号处执行指令可以只修改IP,也可以同时修改CS和IP: jmp指令要给出两种信息: 转移的目的地址 转移的距离(段间转移.段内短转移,段内近转移) ​ jmp short 标 ...

  9. 转移地址在内存中的jmp指令 检测点9.1

    转移地址在内存中的jmp指令有两种格式: (1)jmp word ptr 内存单元地址(段内转移) 功能:从内存单元地址处开始存放着一个字,是转移的目的偏移地址. mov ax,0123h mov d ...

最新文章

  1. 使用SVN+Axure RP 8.0创建团队项目
  2. linux 卡在grub_安装Linux系统,Ubuntu时卡在这个界面不动了,有3个小时了。。显示:“正在运行update_grub”......
  3. Codeforces 1009D:Relatively Prime Graph
  4. Install GIT in Ubuntu
  5. OMNet++新建工程及运行
  6. Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.
  7. android 属性动画恢复,android – 使用AnimatorSet恢复动画
  8. 论文发表在什么期刊上_设计论文发表【期刊论文】设计论文发表
  9. HAproxy的安装配置及动静分离
  10. 尚硅谷Javaweb教程书城项目订单模块完整版
  11. 中国各省份边界json文件
  12. COS对象存储服务的使用
  13. JAVA系列之JVM优化
  14. Vue+Vant制作单选全选全不选以及删除按钮van-checkbox
  15. 【Verilog数字系统设计(夏雨闻)6-------模块的结构、数据类型、变量和基本运算符号2】
  16. 中国全国城市列表JSON数据2022最新
  17. dll文件导出对应的lib文件
  18. 2021年蚌埠学院的高考成绩查询,2021年蚌埠学院高考录取通知书查询 通知书什么时候可以收到...
  19. 关于用出生日期查询生日还有多少天的问题
  20. 三国现实主义的巅峰——贾诩

热门文章

  1. web前端性能优化总结
  2. ASP.NET状态管理之三(隐藏域HiddenField)
  3. Python调用MySQL模块初试
  4. 什么是事务(transaction)?它有什么好处
  5. Qunee for HTML5 在电力方面的应用
  6. CocoStudio游戏发布后资源加密大致实现思路
  7. 一个当了爹的程序员的自白
  8. 关键词与关键词之间的相关度计算
  9. 尤雨溪回应:Vue与TypeScript为什么相性特别差?
  10. 简解Css - 多变的边框