-
-
[求助]关于inline hook的跳转地址
-
发表于: 2009-12-27 09:48 4406
-
http://bbs.pediy.com/showthread.php?t=42705
这篇文章中的inline hook KiFastCall,在跳回原来这个函数的时候计算跳转地址为什么要这样:
*((ULONG*)(JmpCode+1)) = (uSysenter + nCopyLen) - ((ULONG)pMovedSysenterCode + nCopyLen)- 5;//计算跳转地址
不能直接*((ULONG*)(JmpCode+1)) = uSysenter + nCopyLen;
他这里定义的UCHAR JmpCode[]={0xE9,0,0,0,0}; opcode是e9,不是可以直接跳转到绝对地址的吗?
还有我还试了XDE引擎
jumpback.opcode = 0xEA;
jumpback.addrsize = 4;
jumpback.datasize = 2;
jumpback.addr_l[0] = (long)(Fun);
jumpback.data_s[0] = 8;
len = xde_asm(cJumpback,&jumpback);
结果某次调试时Fun的地址是0x010d3210,汇编后的指令内容却是 EA A4 11 0D 01 08 00,这里段选择子和opcode都没错,可是跳转地址为什么不是我的Fun的地址呢
请各位帮帮忙,谢谢
明白了,E9 cw JMP rel16 相对跳转(16位),使rel16处的代码位下一条指令 ,E9是相对跳转
EA cb JMP ptr16:32 远距离绝对跳转, 下一指令地址在操作数中
这篇文章中的inline hook KiFastCall,在跳回原来这个函数的时候计算跳转地址为什么要这样:
*((ULONG*)(JmpCode+1)) = (uSysenter + nCopyLen) - ((ULONG)pMovedSysenterCode + nCopyLen)- 5;//计算跳转地址
不能直接*((ULONG*)(JmpCode+1)) = uSysenter + nCopyLen;
他这里定义的UCHAR JmpCode[]={0xE9,0,0,0,0}; opcode是e9,不是可以直接跳转到绝对地址的吗?
还有我还试了XDE引擎
jumpback.opcode = 0xEA;
jumpback.addrsize = 4;
jumpback.datasize = 2;
jumpback.addr_l[0] = (long)(Fun);
jumpback.data_s[0] = 8;
len = xde_asm(cJumpback,&jumpback);
结果某次调试时Fun的地址是0x010d3210,汇编后的指令内容却是 EA A4 11 0D 01 08 00,这里段选择子和opcode都没错,可是跳转地址为什么不是我的Fun的地址呢
请各位帮帮忙,谢谢
明白了,E9 cw JMP rel16 相对跳转(16位),使rel16处的代码位下一条指令 ,E9是相对跳转
EA cb JMP ptr16:32 远距离绝对跳转, 下一指令地址在操作数中
[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!
赞赏
他的文章
赞赏
雪币:
留言: