jmp指令的机器码编写
来源:互联网 发布:linux终端装中文输入法 编辑:程序博客网 时间:2024/05/01 09:44
1.首先直接的jmp分3种 :
Short Jump(短跳转)机器码 EB rel8
只能跳转到256字节的范围内
Near Jump(近跳转)机器码 E9 rel16/32
可跳至同一个段的范围内的地址
Far Jump(远跳转)机器码EA ptr 16:16/32
可跳至任意地址,使用48位/32位全指针
2.下面来看一个网上的例子:
2.下面来看一个网上的例子:
地址 HEX 反汇编
010073B4 - E9 7B9E8787 JMP88881234
010073B9 - E9 769E8787 JMP88881234
010073BE - E9 719E8787 JMP88881234
010073C3 - E9 6C9E8787 JMP88881234
010073C8 - E9 679E8787 JMP88881234
010073CD - E9 629E8787 JMP88881234
010073D2 - E9 5D9E8787 JMP88881234
010073D7 - E9 589E8787 JMP88881234
010073DC - E9 539E8787 JMP88881234
010073E1 - E9 4E9E8787 JMP88881234
010073E6 - E9 499E8787 JMP88881234
(可以看到同样的汇编指令,在不同的地址上的机器码不一样)
要注意的是,短跳转和近跳转指令中包含的操作数都是相对于(E)IP的偏移,而远跳转指令中包含的是目标的绝对地址,所以短/近跳转会出现跳至同一目标的指令机器码不同,不仅会不同,而且应该不同。而远跳转中包含的是绝对地址,因此转移到同一地址的指令机器码相同
要注意的是,短跳转和近跳转指令中包含的操作数都是相对于(E)IP的偏移,而远跳转指令中包含的是目标的绝对地址,所以短/近跳转会出现跳至同一目标的指令机器码不同,不仅会不同,而且应该不同。而远跳转中包含的是绝对地址,因此转移到同一地址的指令机器码相同
第一条:88881234-010073b4=87879e80
这个值跟E9后面的那个值差了5(E9后面那个值要反过来看,因为X86是大端模式)
3.指令是这样计算偏移的. 004A2FCE ^ E9 072BFEFF jmp 00485ADA
485ADA-4A2FCE= FFFE2B0C 这里只是指向当前指令的IP处,实际计算跳转地址要去
掉当前指令的长度,当前的跳转指令需要5个字节,FFFE2B0C-5=FFFE2B07
计算公式: 要跳转的地址-指令所在的位置-5=机器码
结合上面的博文,可以在被HOOK的地址出写入JMP指令跳回到原来的地方,
被HOOK的地址-原来地址-5 = 机器码(这个就是要写入到 被HOOK地址的地方)。
0 0
- jmp指令的机器码编写
- jmp指令对应的机器码
- jmp指令对应的机器码
- Jmp指令的格式
- 单片机指令的机器码
- call jmp 与机器码
- JMP caLL 机器码
- 汇编指令jmp的理解
- jmp指令
- JMP指令
- jmp指令
- jmp 指令
- jmp指令
- JMP指令
- 汇编指令CALL与JMP的区别
- 转移地址在寄存器的JMP指令
- 汇编指令与机器码的相互转换
- 汇编指令与机器码的相互转换
- [LeetCode][11]Container With Most Water解析 时间复杂度为O(n) -Java实现
- iMindMap是怎样在学术研究上做贡献的
- CentOS 上通过 yum 快速安装最新版 Transmission
- PCA求解思路
- eclipse, Log4j配置(真心的详细~)
- jmp指令的机器码编写
- Linux下I2C驱动架构全面分析
- 网站建设的基础入门
- 它会知道什么编译的
- 非递归先,中,后遍历二叉树
- 对H264码流数据的NAL起始字节分析(档次、NALU类型)
- SQL SERVER 导入 EXCEL “文本被截断,或者一个或多个字符在目标代码页中没有匹配项”
- 双目视觉与虚拟现实之间
- IOS Dev Intro - Opengl ES Series 01