首页
社区
课程
招聘
[旧帖] (原型+图+源码)热血传奇购药CALL调用成功,但总会弹出一对话框? 0.00雪花
发表于: 2010-11-12 00:14 9812

[旧帖] (原型+图+源码)热血传奇购药CALL调用成功,但总会弹出一对话框? 0.00雪花

2010-11-12 00:14
9812
下图是点击购买物品时的结果,药品购买成功,但总会跳出如上面的一个错误框,点确定后才会显示:金创药(小量被发现),怎样才能使下面这个错误框不出现呢?详细CALL我取图上来了,大家看看我写得有哪儿不对或者缺少什么?

而详细的购买药品CALL如下:

点击上图可看大图
分析了一下,大家看购买药品CALL在那个JMP内,所以分析一下JMP内的CALL即可.于是,我写了以下的调用:
asm
pushad
push ebp;  //保存原始EBP
mov ebp,esp; //原始ESP保存进EBP里
lea eax,[ebp-$10]//创建一个临时变量
mov esi,$63E834
mov esi,[esi]
add esi,$0f8
mov esi,[esi]
add esi,4
mov esi,[esi]
add esi,0
mov esi,[esi]
mov edx,esi
mov ebx,$00404dd8
call ebx//调用这个CALL后,临时变量赋了值
mov eax,[ebp-$10]//然后将这个临时变量传给EAX

push eax
mov ecx,[esi+$18]
mov edx,$5f6620
mov edx,[edx]
mov edx,[edx]
mov eax,$006400BC
mov eax,[eax]
mov ebx,$0055c940
call ebx//购买物品CALL

mov esp,ebp
pop ebp
popad
end;

以上调用时,总是会弹出一个如第一张图所示的错误框,点确认,才显示购买药品成功.以上写得有哪儿不对或者考虑不周全,请路过的兄弟帮忙看看,提示一下即可.
此处能否不加入
push ebp;  //保存原始EBP
mov ebp,esp; //原始ESP保存进EBP里

mov esp,ebp
pop ebp
popad
但测试时,如果不加堆栈平横的语句,购买物品不成功,请大家分析一下,为什么呢?

主要想弄明白原理,期待大家的回复,不管对错,主要是思路

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

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 168
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
手机党…看不太清…给你顶一个,大半夜了还在调,不错!精神可佳!
2010-11-12 07:44
0
雪    币: 170
活跃值: (45)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
如果不影响功能的话,可以用FindWindow找到MessageBox的窗口句柄,然后用SendMessage发送一个WM_CLOSE的消息关掉它
2010-11-17 15:38
0
雪    币: 20
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
SetUnhandledExceptionX
2010-11-17 15:55
0
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
楼主用的delphi
2010-11-17 16:01
0
雪    币: 204
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
哪个地方非法访问了,自己仔细找找吧!
哎呀,盛大十三太保来了。楼主快藏起来!
2010-11-17 16:03
0
雪    币: 81
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
最早 迷恋的网游  
帮不上忙
希望楼主早日解决问题
2010-11-18 09:27
0
雪    币: 245
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
asm
pushad
push ebp;  //保存原始EBP
mov ebp,esp; //原始ESP保存进EBP里
sub esp, $10  // 这才是创建临时变量,后面那句只是取地址,暂时只在你的代码中发现这个问题。
lea eax,[ebp-$10]//创建一个临时变量
mov esi,$63E834
mov esi,[esi]
add esi,$0f8
mov esi,[esi]
add esi,4
mov esi,[esi]
add esi,0
mov esi,[esi]
mov edx,esi
mov ebx,$00404dd8
call ebx//调用这个CALL后,临时变量赋了值
mov eax,[ebp-$10]//然后将这个临时变量传给EAX

push eax
mov ecx,[esi+$18]
mov edx,$5f6620
mov edx,[edx]
mov edx,[edx]
mov eax,$006400BC
mov eax,[eax]
mov ebx,$0055c940
call ebx//购买物品CALL

mov esp,ebp
pop ebp
popad
end;
2010-11-18 10:18
0
雪    币: 204
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
看来楼上的找到问题了
2010-11-18 15:56
0
雪    币: 219
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
[QUOTE=晕菜菜;891140]asm
pushad
push ebp;  //保存原始EBP
mov ebp,esp; //原始ESP保存进EBP里
sub esp, $10  // 这才是创建临时变量,后面那句只是取地址,暂时只在你的代码中发现这个问题。
lea eax,[ebp-$10]//创建一个临时变量...[/QUOTE]

应该是这个问题吧 哈哈~,局部变量空间是用减esp创建的,否则下一个call会覆盖掉的
2010-11-19 21:42
0
游客
登录 | 注册 方可回帖
返回
//