汇编指令CALL的硬编码E8 和 JMP 的硬编码E9 后面参数的计算方法

您所在的位置:网站首页 汇编jmp是什么意思 汇编指令CALL的硬编码E8 和 JMP 的硬编码E9 后面参数的计算方法

汇编指令CALL的硬编码E8 和 JMP 的硬编码E9 后面参数的计算方法

2024-07-13 23:16| 来源: 网络整理| 查看: 265

试验的C函数代码如下: #include void function() { printf("hello"); } int main(int argc,char* argv[]) { function(); return 0; } 反汇编后的代码如下

call 硬编码是E8 , 但是后面的 1E B3 FF FF 是怎么计算出来的呢? 在这里插入图片描述

E8 后面的硬编码计算公式如下

假设我们需要获得E8 后面的硬编码为X X=真正要跳转的地址-E8这条指令的下一行地址 X=047163Bh-0047631D X=FF FF B3 1E 转换一下 低位在前高位在后就获得了硬编码 1E B3 FF FF 在这里插入图片描述

JMP 硬编码E9 后面的参数计算方法和CALL是一样的

在这里插入图片描述

下图是用计算器16进制计算出的结果截图

在这里插入图片描述

继续研究******************************* 下一条指令地址的获取方法

E8 这条指令固定 是 5个字节组成, 当前这条E8指令的地址加5个字节就是下一条指令的地址 下一条指令地址=当前E8指令地址+5 下一条指令地址=00476318+5 下一条指令地址=0047631D

在这里插入图片描述 硬编码的公式就可以修改成为如下

X=真正要跳转的地址-(E8这条指令的地址+5) X=047163B-(0476318+5)

注意

E8这条指令的地址是 ImageBuffer拉伸后的地址,而且是系统加载到内存运行时的虚拟地址 要计算ImageBase +E8所在的偏移地址 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3