| | |
|
组别 | 白衣卿相 |
级别 | 讨逆将军 |
好贴 | 3 |
功绩 | 153 |
帖子 | 686 |
编号 | 91725 |
注册 | 2006-11-16 |
| |
| | |
|
|
|
发现exe一个古老的bug
最近发现ccz的原版exe有一个bug,不过这个bug并不是很容易出现,因此一直没有得到修正,我自己也是很偶然发现的.
测试这个bug的方法如下:
先把某个武将的武器护具卸掉,再使用武将一览,查看武将装备,当看到这名裸体武将以后,如果再继续看其他武将,bug就出现了:
图片附件: 02.gif (2008-11-8 10:48, 324.4 K)
![](attachments/month_0811/20081108_acbc3bfb5cc5c26772373DJfTnamOemz.gif)
标签上的文字没有了
不过这完全只是一个显示上的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上进行的修改,如果是其他版本的请自行寻找空白位置.
|
|
|
|