首页
BBS
引擎官网
更新日志
996传世引擎
996传奇盒子
搜索
登录
立即注册
热搜词
引擎下载
更新
脚本转换
本版
文章
帖子
用户
多端版引擎专区
+关注
发布新帖
游戏崩溃后对dmp文件的分析
[复制链接]
sky258
2024-6-14 15:17:07
|
学习教程
|
0
344
sky258
sky258
当前离线
积分
3364
25
回帖
6274
金币
3364
积分
积分
3364
收听TA
发消息
发表于 2024-6-14 15:17:07
|
显示全部楼层
|
阅读模式
马上注册,下载996引擎,与更多游戏开发者交流。
您需要
登录
才可以下载或查看,没有账号?
注册
×
相关工具:WinDbg
ollydbg
要求:
有一定的逆向基础
游戏崩溃时会在客户端目录生成dmp文件(内存镜像文件)
1.
使用WinDbg 打开dmp文件
首次打开可能要稍微等待一下,因为他要下载一些符号文件
2.
在
命令处输入
.excr 快速定位崩溃位置
崩溃的模块,和一些寄存器信息
可以看到是lua这里崩溃了,大致应该是在访问了一个不存在的指针,导致崩溃。
3.
输入
!analyze -v 让windbg 给我们分析下崩溃原因
返回结果
*******************************************************************************
* *
* Exception Analysis *
* *
*******************************************************************************
*** WARNING: Unable to verify checksum for game.exe
*** WARNING: Unable to verify checksum for libcocos2d.dll
*** WARNING: Unable to verify checksum for OpenAL32.dll
KEY_VALUES_STRING: 1
Key : AV.Fault
Value: Read
Key : Analysis.CPU.Sec
Value: 0
Key : Analysis.DebugAnalysisProvider.CPP
Value: Create: 8007007e on DESKTOP-15R5MQL
Key : Analysis.DebugData
Value: CreateObject
Key : Analysis.DebugModel
Value: CreateObject
Key : Analysis.Elapsed.Sec
Value: 63
Key : Analysis.Memory.CommitPeak.Mb
Value: 169
Key : Analysis.System
Value: CreateObject
Key : Timeline.Process.Start.DeltaSec
Value: 1003
APPLICATION_VERIFIER_FLAGS: 0
CONTEXT: (.ecxr)
eax=f8b9d2ec ebx=0ad501c8 ecx=1d18b38c edx=1d18ba60 esi=0ad501c8 edi=00000610
eip=622828ee esp=009eec80 ebp=0e6e19c8 iopl=0 nv up ei pl nz na pe nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00210206
lua51!lua_yield+0x1a72e:
622828ee 8b07 mov eax,dword ptr [edi] ds:002b:00000610=????????
Resetting default scope
EXCEPTION_RECORD: (.exr -1)
ExceptionAddress: 622828ee (lua51!lua_yield+0x0001a72e)
ExceptionCode: c0000005 (Access violation)
ExceptionFlags: 00000000
NumberParameters: 2
Parameter[0]: 00000000
Parameter[1]: 00000610
Attempt to read from address 00000610
PROCESS_NAME: game.exe
READ_ADDRESS: 00000610
ERROR_CODE: (NTSTATUS) 0xc0000005 - 0x%p 0x%p %s
EXCEPTION_CODE_STR: c0000005
EXCEPTION_PARAMETER1: 00000000
EXCEPTION_PARAMETER2: 00000610
STACK_TEXT:
WARNING: Stack unwind information not available. Following frames may be wrong.
009eec88 62282b0f 0ad501c8 7edefed8 009eecfc lua51!lua_yield+0x1a72e
009eecbc 622832a9 0ad501c8 622baf1d 009eecf8 lua51!lua_yield+0x1a94f
009eed2c 756c2e6e 005d2261 00000000 00000000 lua51!luaL_traceback+0x169
009eedbc 76680b82 009eedc8 e24c4a02 00000001 shell32!CMergedFldrNamespace::GetDropFolder+0x7f
00000000 00000000 00000000 00000000 00000000 KERNELBASE!RaiseException+0x62
SYMBOL_NAME: lua51!lua_yield+1a72e
MODULE_NAME: lua51
IMAGE_NAME: lua51.dll
STACK_COMMAND: ~0s ; .ecxr ; kb
FAILURE_BUCKET_ID: NULL_CLASS_PTR_READ_c0000005_lua51.dll!lua_yield
OS_VERSION: 10.0.19041.1
BUILDLAB_STR: vb_release
OSPLATFORM_TYPE: x86
OSNAME: Windows 10
FAILURE_ID_HASH: {b7ee08a3-73c5-e01f-6723-47799b22f4eb}
Followup: MachineOwner
---------
复制代码
看下给出堆栈信息使用了lua的
traceback函数,这时候肯定是会有lua报错的,我们可以到客户端的dbug窗口查看错误信息
4.
定位到出错的位置
打开
ollydbg附加到进程 查看模块信息
可执行模块, 条目 24 基址=62580000 大小=00066000 (417792.) 入口=625D87BA lua51.<ModuleEntryPoint> 名称=lua51 路径=D:\开发\Client\lua51.dll
ctrl+n 找一下lua_yield这个函数的起始地址
625881C0 > 56 push esi
然后625881C0 + 偏移地址 1a72e = 625A28EE
ctrl+g定位到详细的位置
以上只是举一个简单的例子
我们查看堆栈信息的时候已经执行过了
traceback,那么lua绝对会抛出错误信息,我们根据错误信息解决崩溃问题就可以了
如果没有错误信息,我们就要慢慢分析调试了...
回复
使用道具
举报
返回列表
发帖