标题:
发现exe一个古老的bug
[打印本页]
作者:
star175
时间:
2008-11-8 10:48
标题:
发现exe一个古老的bug
最近发现ccz的原版exe有一个bug,不过这个bug并不是很容易出现,因此一直没有得到修正,我自己也是很偶然发现的.
测试这个bug的方法如下:
先把某个武将的武器护具卸掉,再使用武将一览,查看武将装备,当看到这名裸体武将以后,如果再继续看其他武将,bug就出现了:
[attach]67529[/attach]
标签上的文字没有了
不过这完全只是一个显示上的bug,并不会对游戏有任何不良影响.
除了原版外,还测试了yfz以及我自己的exe,均发现有此bug存在,经过研究写出了修改方法:
武器护具不能显示 LV EXP文字
增加一个自定义函数 共调用两次
00405265 /$ 55 PUSH EBP
00405266 |. 8BEC MOV EBP,ESP
00405268 |. 68 C46A4800 PUSH Ekd5.00486AC4 ; ASCII "Lv"
0040526D |. 837D 0C 00 CMP DWORD PTR SS:[EBP+C],0
00405271 |. 75 07 JNZ SHORT Ekd5.0040527A
00405273 |. 68 8A050000 PUSH 58A
00405278 |. EB 05 JMP SHORT Ekd5.0040527F
0040527A |> 68 8C050000 PUSH 58C
0040527F |> FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |hWnd
00405282 |. FF15 D8624800 CALL DWORD PTR DS:[<&USER32.SetDlgItemTextA>] ; \SetDlgItemTextA
00405288 |. 68 D06A4800 PUSH Ekd5.00486AD0 ; ASCII "Exp"
0040528D |. 837D 0C 00 CMP DWORD PTR SS:[EBP+C],0
00405291 |. 75 07 JNZ SHORT Ekd5.0040529A
00405293 |. 68 8B050000 PUSH 58B
00405298 |. EB 05 JMP SHORT Ekd5.0040529F
0040529A |> 68 8D050000 PUSH 58D
0040529F |> FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |hWnd
004052A2 |. FF15 D8624800 CALL DWORD PTR DS:[<&USER32.SetDlgItemTextA>] ; \SetDlgItemTextA
004052A8 |. 8BE5 MOV ESP,EBP
004052AA |. 5D POP EBP
004052AB \. C2 0800 RETN 8
00476EB9 FF75 08 PUSH DWORD PTR SS:[EBP+8]
00476EBC FF15 DC624800 CALL DWORD PTR DS:[<&USER32.GetDlgItem>] ; USER32.GetDlgItem
00476EC2 85C0 TEST EAX,EAX
00476EC4 0F84 6C040000 JE Ekd5.00477336
00476ECA 6A 00 PUSH 0
00476ECC 8B4D DC MOV ECX,DWORD PTR SS:[EBP-24]
00476ECF E8 1CF7F8FF CALL Ekd5.004065F0
00476ED4 3C FF CMP AL,0FF
00476ED6 0F84 0C010000 JE Ekd5.00476FE8
00476EDC 6A 00 PUSH 0
00476EDE FF75 08 PUSH DWORD PTR SS:[EBP+8]
00476EE1 E8 7FE3F8FF CALL Ekd5.00405265
00476FE3 /E9 94000000 JMP Ekd5.0047707C
0047704D FF75 08 PUSH DWORD PTR SS:[EBP+8]
00477050 FF15 DC624800 CALL DWORD PTR DS:[<&USER32.GetDlgItem>] ; ||hWnd
00477056 50 PUSH EAX
00477057 FF15 E0624800 CALL DWORD PTR DS:[<&USER32.ShowWindow>] ; |hWnd
0047705D 68 28754B00 PUSH Ekd5.004B7528
00477062 68 79050000 PUSH 579
00477067 FF75 08 PUSH DWORD PTR SS:[EBP+8]
0047706A FF15 D8624800 CALL DWORD PTR DS:[<&USER32.SetDlgItemTextA>>; USER32.SetDlgItemTextA
00477070 6A 68 PUSH 68
00477072 B9 D86C4B00 MOV ECX,Ekd5.004B6CD8 ; /Arg1
00477077 E8 53C3FEFF CALL Ekd5.004633CF
0047707C 6A 01 PUSH 1
0047707E 8B4D DC MOV ECX,DWORD PTR SS:[EBP-24]
00477081 E8 6AF5F8FF CALL Ekd5.004065F0
00477086 3C FF CMP AL,0FF
00477088 0F84 0C010000 JE Ekd5.0047719A
0047708E 6A 01 PUSH 1
00477090 FF75 08 PUSH DWORD PTR SS:[EBP+8]
00477093 E8 CDE1F8FF CALL Ekd5.00405265
蓝色文字是原有的代码,不过为了挤出10个字节,挪动了一下位置,红色的是对新函数的调用代码.
以上是在本人发布的exe上进行的修改,如果是其他版本的请自行寻找空白位置.
图片附件:
02.gif
(2008-11-8 10:48, 324.4 K) / 该附件被下载次数 140
http://xycq.org.cn/forum/attachment.php?aid=67529
作者:
qw65
时间:
2008-11-8 11:55
我也发现了,不过一直不在意
作者:
qw65
时间:
2008-11-9 06:45
可以请教一下吗?我用二号补丁玩,为什么控制友军指令无效??
作者:
434902652
时间:
2008-11-9 08:48
是有这一回事,楼主很仔细
欢迎光临 轩辕春秋文化论坛 (http://xycq.org.cn/forum/)
Powered by Discuz! 5.0.0