-
-
[求助]ring3 inline hook的跳转地址和保存字节数
-
发表于:
2010-12-9 12:27
4782
-
[求助]ring3 inline hook的跳转地址和保存字节数
有几个问题,达人回答下啊。。。新手很困惑.....
//代码
while (g_iSize < 5)
{
g_iSize += GetOpCodeSize((void *)((DWORD)addr1 + g_iSize));
}
memcpy(g_szOirCode, addr1, g_iSize);
char *pAddr = (char *)addr1;
DWORD dwOldProtect, dwTemp;
VirtualProtect( (LPVOID)addr1, 5,PAGE_EXECUTE_READWRITE, &dwOldProtect );//去掉代码区内存保护
pAddr[0] = 0xe9;
*(DWORD *)((char *)addr1+1) = (DWORD)addr2 - (DWORD)addr1 - 5;
VirtualProtect( (LPVOID)addr1, 5,dwOldProtect, &dwTemp); //恢复内存保护
问题1: 保存目标函数的几个字节?为什么有的是5字节 有的不是5字节
按照我的理解,可能有些函数并不是下面的代码开头,所以有可能不是5字节,是么?
push ebp
mov ebp,esp
push ebx
push edi
push esi
问题2: 写入的跳转指令 为什么有的是 jmp,xxxxxxxx有的是 mov reg32,xxxxxxxx,jmp reg32
我翻了些资料,是长短跳转的问题,有没有比较通用的跳转方式呢,或者说怎么确定是长跳还是短跳
最上面的代码中的直接硬编码0xe9这样跳转和hookfun-原来fun-5是否具有通用性?
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!