本文主要是介绍关于程序崩溃后dmp简易分析的一点收获,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
最近出现一个托盘文件在一台XP SP3实体机上偶尔崩溃的现象,以前从未接触过此类问题解决,求助于同事,才初步有了点处理的知识。
准备工具列表:
userdump.exe pid \\用来手动获取当前崩溃的dmp文件,后面的pid可从进程管理器获得,比如xxx.exe
运行后,将生成xxx.dmp
windbg 用于分析dmp文件,本人目前只懂得一点皮毛。
首先就是设置进制文件对应的pdb 和源文件路径。然后载入dmp文件。
然后!analyze -v 显示出自动分析的结果。
在结果中找到如类似的文字,表示错误位置如:
STACK_TEXT:
WARNING: Stack unwind information not available. Following frames may be wrong.
0012fd5c 0041bce6 0017a688 00000000 00000000 ntdll!KiFastSystemCallRet
0012fda0 0041afb4 00000004 2a84b1cd 005b8ed8 VpnTray+0x1bce6
0012fdec 00401176 2a84b1d9 005b8ed8 00000000 VpnTray+0x1afb4
0012ff1c 00548ea8 fffffffe 00000000 00000001 VpnTray+0x1176
0012ff30 00515595 00400000 00000000 000207a4 VpnTray+0x148ea8
0012ffc0 7c817067 80000001 0012ef50 7ffde000 VpnTray+0x115595
0012fff0 00000000 00515600 00000000 78746341 kernel32!RegisterWaitForInputIdle+0x49
然后就使用
u VpnTray+0x115595 计算出该入口的对应内存偏移位置,
使用下面工具进一步分析。
idag 刚接触,暂时认为是反汇编的工具吧,载入exe文件后,使用键盘 G 弹出输入地址的对话框,键入刚才找到的地址,就将弹出汇编代码
如:
loc_515588: ; nCmdShowpush ecx
push eax ; lpCmdLine
push esi ; hPrevInstance
push offset ___safe_se_handler_count ; hInstance
call _wWinMain@16 ; wWinMain(x,x,x,x)
mov [ebp+mainret], eax
cmp [ebp+managedapp], esi
jnz short $LN36_9 ; $LN36
然后就可以慢慢找崩溃的函数位置。
今后还需进一步学习
这篇关于关于程序崩溃后dmp简易分析的一点收获的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!