找回密码
 立即注册
查看: 1526|回复: 0

[CE]eComponent错误附加信息和修正方法简述

[复制链接]
发表于 2013-6-8 08:07:26 | 显示全部楼层 |阅读模式
  想为自己增加怪物的人一定有过这个问题,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?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|网站地图|联系我们|关于我们|隐私条款|免责声明|小黑屋|D2home暗黑1.09战网 ( 鲁ICP备2020047197号 )

GMT+8, 2024-11-28 13:04 , Processed in 0.239475 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表