首页
社区
课程
招聘
[求助]VC6的一小问题想不明白
发表于: 2008-9-9 22:21 4896

[求助]VC6的一小问题想不明白

2008-9-9 22:21
4896
在网上找了一段 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); 
} 


求大大们解释一下~ 谢谢 ~!如果不用原来的写法,应该怎么样解决这个问题?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 22
活跃值: (443)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
UCHAR myaddr[5];               

//这里应该是5个字节的机器码 不是 FARPROC.. 不需要增加语句

不知道对否
2008-9-9 23:02
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
[QUOTE=靴子;507320]UCHAR myaddr[5];               

//这里应该是5个字节的机器码 不是 FARPROC.. 不需要增加语句

不知道对否[/QUOTE]

呵呵。。。那如果非要把这段做成子程序来实现的话 那要如何得到真正的机器码呢?

2008-9-9 23:29
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
4
lea换成mov
2008-9-9 23:33
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
forgot 大~ 真的好强~!
2008-9-9 23:50
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
lea是传送偏移地址的。
2008-10-31 15:51
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
要多看看IBM汇编教程噢。
2008-10-31 15:51
0
游客
登录 | 注册 方可回帖
返回
//