自己写了一个HOOK MessageBox函数的代码,有一句不是很明白,请指教
[code=C/C++][/code]
unsigned char g_Data[5] = {0};
BOOL SetHookEx(PROC1 OldProc,PROC1 newProc)
{
char *pChar = (char*)OldProc;
unsigned char str[5] = {0};
str[0] = 0xE9;//jmp指令
DWORD newAddr = (DWORD)newProc-(DWORD)OldProc-5 ;//这句不明白
memcpy(str+1,(void*)&newAddr,4);
size_t size = 0;
//先保存
memcpy(g_Data,pChar,5);
if( 0 == ::WriteProcessMemory(::GetCurrentProcess(),
pChar,str,sizeof(str),NULL) )
return FALSE;
return TRUE;
}
DWORD newAddr = (DWORD)newProc-(DWORD)OldProc-5 ;这句是别人帮我修改的,我不明白为什么需要相减,不是jmp到我自己的函数地址就可以了吗?为什么还要相减呢?
小弟分数不多,但是还是恳请大哥大姐们指点下。谢谢
[解决办法]
不解!!!!!!!!!
[解决办法]
也很想知道为什么。。。
[解决办法]
windows api还未涉及。。。。
[解决办法]
你应该知道jmp跳转指令码的格式
0xe9 + jmp指令的下一指令地址到目标地址的相对距离
相对距离= 目标地址-(jmp指令起始地址+5) 共4个字节
[解决办法]
建议你去看一下,生成的obj文件,是什么这两个入口地址相差就是这个数呀?