汇编指令CALL的硬编码E8 和 JMP 的硬编码E9 后面参数的计算方法 |
您所在的位置:网站首页 › 汇编jmp是什么意思 › 汇编指令CALL的硬编码E8 和 JMP 的硬编码E9 后面参数的计算方法 |
试验的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 |