Board logo

标题: 发现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