- 积分
- 869
- Hb
-
- 注册时间
- 2008-8-8
- 最后登录
- 1970-1-1
- 在线时间
- 小时
- 精华
|
本战网成立于2008年4月18日,QQ群:7935950;Gm:天狼≡战 网 玩 家 必 读≡ |
想为自己增加怪物的人一定有过这个问题,eComponent < NUM_COMPONENTS line #1437的错误。我简单的看过这段代码,做了个截取更多一些DEBUG信息的patch,希望可以帮助大家找到问题所在。
1、增加了对怪物(或物品OBJECT)的信息截取
2、增加了对动画模式的信息截取
3、增加了对应模式COF的内容截取
4、增加了寄存器内容的截取
下面的是Component检测,大于16个就去显示eComponent < NUM_COMPONENTS line #1437的错误。改为截取一些有用信息:
6FB5F358 . 83FA 10 cmp edx,10
6FB5F35B . 0F8D 9FDA0000 jge D2Client.6FB6CE00
截取一些有用信息部分,每段以"////"开始,还有一些提示信息,如寄存器内容--"reg
",怪物信息--"mon ",COF内容--"cof ",模式--"mod ",指针--"pt
"
6FB6CE00 > \50 push eax
6FB6CE01 . 53 push ebx
6FB6CE02 . 51 push ecx
6FB6CE03 . 52 push edx
6FB6CE04 . 55 push ebp
6FB6CE05 . 56 push esi
6FB6CE06 . 57 push edi
6FB6CE07 68 72656720 push 20676572
6FB6CE0C 68 2F2F2F2F push 2F2F2F2F ;寄存器内容的截取
6FB6CE11 . 8BF8 mov edi,eax
6FB6CE13 . B9 0C000000 mov ecx,0C
6FB6CE18 . 8BD5 mov edx,ebp
6FB6CE1A . E8 B1FFFFFF call D2Client.6FB6CDD0
6FB6CE1F 68 6D6F6E20 push 206E6F6D
6FB6CE24 68 2F2F2F2F push 2F2F2F2F ;怪物(或物品OBJECT)的信息截取
6FB6CE29 . B9 40000000 mov ecx,40
6FB6CE2E . 8BD6 mov edx,esi
6FB6CE30 . E8 9BFFFFFF call D2Client.6FB6CDD0
6FB6CE35 68 636F6620 push 20666F63
6FB6CE3A 68 2F2F2F2F push 2F2F2F2F ;对应模式COF的内容截取
6FB6CE3F . 8B45 54 mov eax,dword ptr ss:[ebp+54]
6FB6CE42 . 8B58 28 mov ebx,dword ptr ds:[eax+28]
6FB6CE45 > 8B4B 08 mov ecx,dword ptr ds:[ebx+8]
6FB6CE48 . 3B71 14 cmp esi,dword ptr ds:[ecx+14]
6FB6CE4B . 74 16 je short D2Client.6FB6CE63
6FB6CE4D . 8B5B 10 mov ebx,dword ptr ds:[ebx+10]
6FB6CE50 . 85DB test ebx,ebx
6FB6CE52 .^ 75 F1 jnz short D2Client.6FB6CE45 ;搜索动画模式
6FB6CE54 68 74612F2F push 2F2F6174
6FB6CE59 68 2F2F6461 push 61642F2F
6FB6CE5E .^ E9 9C25FFFF jmp D2Client.6FB5F3FF ;结束信息截取,回去继续line #1437的错误信息输出
6FB6CE63 > 8B51 14 mov edx,dword ptr ds:[ecx+14]
6FB6CE66 . 52 push edx
6FB6CE67 . 51 push ecx
6FB6CE68 . 53 push ebx
6FB6CE69 . 50 push eax
6FB6CE6A 68 70742020 push 20207470
6FB6CE6F 68 2F2F2F2F push 2F2F2F2F ;怪物->模式->COF的搜索过程的指针
6FB6CE74 . 8BD1 mov edx,ecx
6FB6CE76 . B9 10000000 mov ecx,10
6FB6CE7B . E8 50FFFFFF call D2Client.6FB6CDD0
6FB6CE80 68 6D6F6420 push 20646F6D
6FB6CE85 68 2F2F2F2F push 2F2F2F2F ;动画模式的信息截取
6FB6CE8A .^ EB C8 jmp short D2Client.6FB6CE54 ;结束
信息截取函数,以"begi"开始,"end"结束,前后还有信息地址。
6FB6CDD0 /$ 5B pop ebx
6FB6CDD1 |. 52 push edx
6FB6CDD2 |. 68 656E6420 push 20646E65
6FB6CDD7 |. 8BC1 mov eax,ecx
6FB6CDD9 |. C1E0 02 shl eax,2
6FB6CDDC |. 03D0 add edx,eax
6FB6CDDE |> 49 /dec ecx
6FB6CDDF |. 83EA 04 |sub edx,4
6FB6CDE2 |. 8B02 |mov eax,dword ptr ds:[edx]
6FB6CDE4 |. 50 |push eax
6FB6CDE5 |. 85C9 |test ecx,ecx
6FB6CDE7 |.^ 75 F5 \jnz short D2Client.6FB6CDDE
6FB6CDE9 |. 68 62656769 push 69676562
6FB6CDEE |. 52 push edx
6FB6CDEF |. 68 64617461 push 61746164
6FB6CDF4 |. 53 push ebx
6FB6CDF5 \. C3 retn
当然,原来输出的错误信息中也是有部分有用信息的,下面就以一些例子看看附加的和原来信息,进而分析错误。
暗月2.1的30D号怪,双翼骑士
Assertion Failure
Location : D2Client\Engine\GfxUtil.cpp, line #1437
Expression : eComponent < NUM_COMPONENTS
23:21:52.421 Stack bytes:
23:21:52.421 0012F760: 908C5311 008C5311 80CEB66F FEFFFFFF ..S...S..味o? |
|