返回列表 发帖

[历史] 关于Module Stack跳框[已开放供探讨]

一般当客户端出现如下提示时是最为头疼的,通常无法判断出错原因
现就一条典型的Module Stack型的错误,探讨一下大概可能以及排除
因本人不是程序工程师出身加之经验有限,故仍希望高手解答

一个典型的Module Stack出错提示信息表现为进入游戏后出现以下报错信息对话框
确认后退出游戏并关闭窗口
提示信息含义如下

Module Name: F:\Gravity\RO\Ragfree.exe
//错误模块,即提示错误的文件模块,本例中为RagFree.exe,访问免费服文件

Time Stamp: 0x4c4cef4f - Mon Jul 26 10:13:35 2010
//时间戳,即发生错误的时间;前Hex代码0x4c4cef4f为实际发生时间2010/07/26-10:13:35(周六)的时间Hex码

Exception Type: 0xc0000005
//错误可能类型05;05错误一律为内存访问拒绝错误(RAM Access Error),一般是由内存地址冲突所致

0x0062433e        Ragfree.exe //正常调用的模块文件,本例中为Ragfree.exe
0x0061941a        Ragfree.exe
0x005340f9        Ragfree.exe
0x005a1d12        Ragfree.exe
0x005a1a56        Ragfree.exe
0x00701114        Ragfree.exe
0x00715b2c        Ragfree.exe
0x7c817077        kernel32.dll //通常为内存冲突的模块,本例中为Kernel32.dll

eax: 0xfffffffd        ebx: 0x18332390 //内存寄存器,内存Hex码,其中ax为开头,bx为结尾
ecx: 0x00000000        edx: 0xffffffbb //寄存器大小以及输出,其中cx表示寄存器内变量,dx为输出
esi: 0x00000004        edi: 0x049a7470
ebp: 0x0012fa48        esp: 0x0012f34c

stack 0012f34c - 0012f74c
//发生错误的内存地址,取FF字节(256字节);本例中为0012f34c - 0012f74c;会因每次Ragfree.exe加载不同而不同

0012F34C : F8 B9 B6 03 90 23 33 18 F8 B9 B6 03 73 70 72 69
0012F35C : 74 65 5C BE C7 BC BC BB E7 B8 AE 5C BF A9 5C BF
0012F36C : A9 5F BF E4 C1 A4 C0 C7 B1 CD 2E 73 70 72 00 00
0012F37C : 0C 00 00 00 00 10 00 00 00 00 00 00 A0 39 DE 06
0012F38C : 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0012F39C : FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00
0012F3AC : 04 30 C2 62 80 60 C2 62 FF FF FF FF 00 00 00 00
0012F3BC : F8 F3 12 00 F7 31 C2 62 55 11 01 8E 0B 01 00 00
0012F3CC : 0C 00 00 00 00 10 00 00 00 00 00 00 A0 39 DE 06
0012F3DC : 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
0012F3EC : 55 11 01 8E 0B 01 00 00 01 00 00 00 2C F4 12 00
0012F3FC : 2C 32 C2 62 55 11 01 8E 0B 01 00 00 0C 00 00 00
0012F40C : 00 00 00 00 00 00 00 00 A0 39 DE 06 01 00 00 00
0012F41C : 00 00 00 00 FF FF FF FF 00 00 00 00 FF FF FF FF
0012F42C : 64 F4 12 00 B5 1C F1 77 55 11 01 8E 0B 01 00 00
0012F43C : 0C 00 00 00 00 00 00 00 00 00 00 00 A0 39 DE 06

Launch Info
//出错提示信息

003A 003A 0138 0138 0138 0138 0138 0138
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000

Job : Warlock
//人物职业:大法师

由于Kernel32.dll是Windows系统核心组件,如该文件出现问题则整个Windows都不可能正常启动
故此推测应是Kernel32.dll所加载文件同RagFree.exe不兼容所致问题。
后来检查发现这是由紫光拼音输入法3.0所致
调试环境如下:
1. 计算机软件环境:Windows XP Professional SP3
2. 补丁环境,所有补丁全部打全
3. RO客户端环境,RagFree.exe纯净无补丁无修改(我是在fdata的fclientinfoN.xml内添加xml代码<readfolder></readfolder>来实现开启预读Data文件夹功能)
调试步骤如下:
1. 人物切换大图,也就是切换IP的地图
2. 切图时开启紫光输入法
3. 桌面输入法同紫光输入法不同
4. 在读图Loading...100%的时候切换另外一种输入法
5. 迅速Alt+Tab将活动程序从RagFree.exe切换至桌面
6. 报错,跳框如上提示
据此推测,应当是活动输入法加载Kernel32.dll切换程序导致内存Dump
随后测试,在桌面和活动程序RagFree.exe无任何加载输入法情况下,不再跳框
可见,最为重要的信息为蓝体字(正常模块)和红体字(异常模块),即告知什么程序是正常加载而什么模块加载出现冲突

可能出现加载冲突的有
1. Binkw32.dll
RO客户端贴图驱动
调试:
1. 将客户端内的压缩BMP等文件替换成未知的格式,或是地图贴图文件gnd,gat等损坏
2. 同时输出2个视频,比如同时桌面播放暴雪提供的魔兽CG可执行文件视频包和开RO
解决:
1. 重新安装完整的客户端Data包
2. 关闭其他视频输出文件

2. Cps.dll
窗口会话,同时具有分析封包功能
调试:(涉及使用非法插件也就是内挂,但仅限于调试)
使用正服非法程序登录登录免费服,并在非法插件程序设置对应自动反制技能或者自动使用药水等
登录免费服
报错,掉线
解决:
出现这种报错的概率是非常低的,有则大部分原因是使用了后台插件或者是其他类型的客户端导致程序不兼容

3. RagFree.exe/Ragexe.exe
没错,即使是正常的客户端访问文件也会出现在导致异常的模块中
调试:
随意修改RagFree.exe或者Ragexe.exe失败
另外在正服中利用限瞬移Tele也会导致报错:将无限瞬移文件ro_2ws.dat内容随意修改或是以其他exe文件改名后使用(我调试时候是把command.com改名后替代使用)
登录后即报错
另外部分不同版本的Ragfree.exe或者Ragexe.exe,比如私服等也可能导致这个问题
解决:
确保RagFree.exe以及Ragexe.exe为最新版且无修改且是适合的客户端

4. Kernel32.dll
Kernel32.dll是Windows核心组件,负责Windows功能加载,往往出现这个文件报错的原因最为不可知,因为报错原因肯定不是这个文件的错误而是核心加载项的错误
本例中错误即由输入法所致,如本例即是由紫光输入法所致
但除了输入法外,其他也有可能导致比如正常客户端内的“每日提醒”
实际上是每日提醒的颜色控制符^0xHHHHHH格式导致异常,具体是哪个字符串导致异常我也没调试过
当每日提醒中对应控制文件TipofToay.txt中所有的颜色输入控制符全部删除后再次登录客户端不再出现报错
部分解决方法参考如下
原帖由 hisade 于 2010-9-30 22:53 发表
其实你的情况我遇过无数次...每次游戏loading到100%就会弹出这个视窗。
试过开了10分钟就是不让我进去,一直显示错误

结果很奇怪的是...我在我的账号里创一个新人物,立马就能登入了,然后我就登出把他删除,其他角色就可以登入了 (不过如果你已经创了3个角色我就不知道怎么解决了...)
...

推测是因为Ragfree.exe/Ragexe.exe封包识别同内存现有地址冲突(无法识别现有内存的代码)所致
此类Stack比较难移分析和解决,因为是源自于被加载项的冲突,而你又不可能知道是哪个模块出了问题。

5. DynTmp0.dat(仅限于免费服)
此项文件为反外挂程序
调试:
使用两台不同的机器运行程序
其中一台机器使用杀软将DynTmp0.dat手动隔离或终止其System权限(不要将其进程终止)
另外一台机器使用召唤或者结婚技能将人物转移至不同IP服务器的地图
报错,掉线
解决:
请确保DynTmp0.dat完整,为最新版本以及正常访问网络,并有正常的系统权限(文件属性内设置)
另:据某人早晨Q留言
RODynDll.dll也是反外挂系统一部分,因为还没经行过隔离等调试等所以是否也会导致跳框未知
但也请保持RoDynDll.dll完好和可访问

----------分割线----------
其他讨论:

另外在以往的程序出错调试中还出现几种不跳框直接退出程序的情况
表现为只出现窗口,无任何图形输出后直接关闭,或者是连窗口都没有好像程序没有运行一样
主要调试方法为:
在部分开关控制文件比如
idnum2itemdisplay.txt //物品显示说明文件
mapnametable.txt //地图说明文件
mp3nametable.txt //背景音乐播放
viewpointtable.txt //视角控制文件(我用的无限视野就是把地图名添加到该文件中,缺点是右键双击无法使视角归12点位)
等控制文件的格式做调整,比如在控制识别开关“#”前后加一点字符串,或是故意删除一点
或是使用Debug/UltraEdit32将部分回车换行符号(0D 0A)删除,改成终止符号(0D 1A)
此种调试后可能会导致上述问题,也可能导致其他问题,比如大法转职场所打怪考试场地错误即resnametable.txt中缺少了一行回车换行控制符(0D 0A)所致(文件表象中未
显示)

以上调试限于每个人硬件软件环境不同无法无法每次都能调试成功
即使相同硬件软件环境也可能因为后台运行程序或者其他运行过的程序而导致部分差异
这里只是分享一下我在碰到的此类跳框错误中的想法和解决方案,应高说是“三脚猫谈”
最好仍然希望真正高手解答。

最后,再说一句:
Do not try it at your home.
请勿在家中自行尝试
----MythBusters

[ 本帖最后由 Again 于 2010-10-1 11:05 编辑 ]

Exception Type: 0xc0000005

0x004206cf        RagFree.exe
0x0041d504        RagFree.exe
0x005463a4        RagFree.exe
0x006330bf        RagFree.exe
0x0062e028        RagFree.exe
0x0062eaa7        RagFree.exe
0x0062fc90        RagFree.exe
0x005f52e8        RagFree.exe
0x006009fd        RagFree.exe
0x005af9ac        RagFree.exe
0x005af936        RagFree.exe
0x0070df1c        RagFree.exe
0x00722d0b        RagFree.exe
0x7c817077        kernel32.dll

我之前也是这个kernel32.dll跳框。后来检查发现是我的data.grf更新的有问题,莫名其妙的少了一部分更新,所以看到某些新装备就会跳。
用RO来麻醉

TOP

强帖留名学习
"想哭就痛快的哭吧!不要怕,有我在!"

TOP

OJZ秒了……除了小秘诀我表示神马都不知道

TOP

这就是宿命啊少年

TOP

每台电脑的ro都是不一样的...所以说这个感觉无法避免

TOP

OTZ看不懂

下个目标是神马?
你猜猜
150而已~
目标:在剩余滴时光里发光一队麽麽?

TOP

原帖由 Again 于 2010-9-30 23:58 发表
2. Cps.dll
窗口会话,同时具有分析封包功能
调试:(涉及使用非法插件也就是内挂,但仅限于调试)
使用正服非法程序登录登录免费服,并在非法插件程序设置对应自动反制技能或者自动使用药水等
登录免费服
报错,掉线
解决:
出现这种报错的概率是非常低的,有则大部分原因是使用了后台插件或者是其他类型的客户端导致程序不兼容

Cps.dll几率相当高,原因是“今天的小秘诀”引起的


你能够得到幸福的 因为努力克服过那么多苦难 即使在被不安所击溃的孤单一人的夜里 你也没有认输

TOP

开放
一楼预留

TOP

返回列表