一 下载安装
1 下载安装过程参考
2 百度云下载
链接:<https://pan.baidu.com/s/1V4LuNJgy4XryVuxxpY_McQ>
提取码:<w61i>
3 windbg调试命令全集
二 分析dump步骤
1 点击File—Open Crash Dump打开一个后缀是.dmp的文件
2 点击Debug—Modules 查看模块加载状态,Symbols列有Export/None说明模块加载异常。本文所用dmp异常偏移地址为71f13077。
3 点击File—Symbol File Path
输入srv*http://msdl.microsoft.com/download/symbols,勾选Reload或执行.reload,远程加载符号(目前测下来,均无效)。
4 执行 .sympath 显示当前符号路径,执行lm显示已加载模块。
5 执行 !analyze –v
这里显示出是在使用模块libzmq.dll时调用zmq_proxy_steerable函数宕机的,但实际代码中并未调用此函数,可见有时analyze并不准确。
6 依次执行以下命令,获取异常地址的上下文(DWORD)信息。在符号和版本都匹配的情况下,是会显示出软件中异常代码的。
7 点击View—Memory显示内存信息
由此可见,这种方法在符号和版本未加载正确时,是定位不到dmp实际宕机处的代码的。
另一种方法:
通过异常中断处的地址获取偏移量,计算出实际偏移量再打开源代码用windbg调试(未掌握)。
附上参考链接:s://blog.csdn.net/iwilldoitx/article/details/81048500>
三 注意事项
1 关于加载符号问题
虽然有pdb文件,但是调试系统版本与软件版本不一致时,仍然加载不出。
关于加载symbols的四个方法
(1)从微软符号库加载
srv*http://msdl.microsoft.com/download/symbols
从微软符号库加载放到c:\mysymbols
srv*c:\mysymbols*http://msdl.microsoft.com/download/symbols
(2) 设置环境变量
(3) 将第二点的环境变量名改为_NY_SYMBOL_PROXY, 走代理下载。
(4)symchk /s srv*c:\symbols*https://msdl.microsoft.com/download/symbols c:\windows\system32\*.dll
以上输入符号路径后均要执行.reload,然而我执行后都是得到最下面一行的结果(-_-)。
2 版本不匹配问题处理(64位系统下)
(1) 尝试用x64版windbg调试win32程序
执行.load wow64extsc回车,!sw回车加载wow64exts.dll模块 , 执行lm 显示并未加载进来该模块。
(2) 尝试安装x86版windbg调试win32程序
依然未加载出 ntdll.dll,网上搜索原因如图。
总结:
花了两天时间尝试用windbg分析dmp文件,结果并不好,主要原因是由于软件是32位,符号怎样都加载不进来,产生了严重的阻碍。在此其间,还搜到一些关于异常命令的含义,比如线程死锁,死循环,异常堆栈UnhandledExceptionFilter ,线程等待等。本文记录执行windbg的步骤供日后参考。
PS: 自渡者渡人