-
-
[求助]VC6的一小问题想不明白
-
发表于:
2008-9-9 22:21
4895
-
在网上找了一段 JMP 法 HOOKAPI 的代码。 但是里面有一个奇怪的问题
其中一段代码是实现 JMP address 的,代码如下
NewMessageBoxACode[0]=0xe9;//jmp MyMessageBoxA的相对地址的指令
_asm
{
[COLOR="Red"]lea eax,MyMessageBoxA //注意这个 MyMessageBoxA[/COLOR]
mov ebx,pfMessageBoxA
sub eax,ebx
sub eax,5
mov dword ptr [NewMessageBoxACode+1],eax
}
dwIdNew=GetCurrentProcessId(); //得到所属进程的ID
dwIdOld=dwIdNew;
HookOn();//开始拦截
return(true);
}
现在换一下代码就出问题了
NewMessageBoxACode[0]=0xe9;//jmp MyMessageBoxA的相对地址的指令
[COLOR="Red"]FARPROC myaddr=(FARPROC)MyMessageBoxA; //我们新增的一句 按道理这个地址应该是一样的啊,没错吧?[/COLOR]
_asm
{
[COLOR="Red"]lea eax[/COLOR],[COLOR="Red"]myaddr[/COLOR][COLOR="Red"] //这样写就出错了。得到的NewMessageBoxACode就不一样了 [/COLOR]
mov ebx,pfMessageBoxA
sub eax,ebx
sub eax,5
mov dword ptr [NewMessageBoxACode+1],eax
}
dwIdNew=GetCurrentProcessId(); //得到所属进程的ID
dwIdOld=dwIdNew;
HookOn();//开始拦截
return(true);
}
求大大们解释一下~ 谢谢 ~!
如果不用原来的写法,应该怎么样解决这个问题?
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课