windbg dump文件分析方法

当程序存在偶发的崩溃问题时,设置测试程序生成dump文件,可以用于或许分析崩溃点。

当前假设已经拿到dump文件,并且有程序执行以来的dll文件(最好是debug模式),使用windbg就可以分析调用栈,寻找崩溃点。

打开WindowsKits,找到windbg.exe打开

将dump文件拖入windbg界面,输入lmf显示dump依赖的所有dll文件路径和名称,确保这些dll都存在,如果不存在(dump拷贝到其他PC分析的情况下),可以创建这些目录,将dll放在这些目录下。

输入!analyze -v分析崩溃点

典型的调用栈如下:

f9357734 804f880d 00000003 f9357a90 00000000 nt!RtlpBreakWithStatusInstruction
f9357780 804f93fa 00000003 e1147008 fbe93403 nt!KiBugCheckDebugBreak+0x19
f9357b60 80540853 0000000a e1147008 0000001c nt!KeBugCheck2+0x574
f9357b60 fbe93403 0000000a e1147008 0000001c nt!KiTrap0E+0x233
WARNING: Stack unwind information not available. Following frames may be wrong.
f9357c58 805759d1 ffb5c3b0 8111f318 811d9130 myfault+0x403
f9357d00 8056e33c 00000090 00000000 00000000 nt!IopXxxControlFile+0x5e7
f9357d34 8053d808 00000090 00000000 00000000 nt!NtDeviceIoControlFile+0x2a
f9357d34 7c92eb94 00000090 00000000 00000000 nt!KiFastCallEntry+0xf8
0012f9f0 7c92d8ef 7c801671 00000090 00000000 ntdll!KiFastSystemCallRet
0012f9f4 7c801671 00000090 00000000 00000000 ntdll!ZwDeviceIoControlFile+0xc
0012fa54 004018c2 00000090 83360018 00000000 0x7c801671

这时就可以使用反编译工具,找到对应dll和函数入口,根据函数后的偏移地址,找到崩溃点。

比较困难的是复原当前数据状态,分析是什么异常或者未定义行为导致崩溃。通常是越界,访问空指针等问题。

Windbg是一种强大的Windows调试工具,可以用于分析和调试应用程序的崩溃和错误。静态分析dump文件是一种分析崩溃或错误产生时的内存转储文件的方法。以下是关于如何使用Windbg进行静态分析dump文件的步骤: 首先,我们需要在Windbg中打开dump文件。可以使用以下命令:windbg.exe -z "dump文件路径"。这将加载dump文件并显示Crash Dump Analysis工具。 一旦打开了dump文件,我们可以使用Windbg提供的命令来执行静态分析。以下是一些常用的命令: 1. !analyze -v:这个命令用于自动分析崩溃的原因和调用栈信息。它将提供有关错误的详细信息,例如异常类型、出错地址和相关模块。 2. lm:这个命令用于列出加载的模块。通过检查模块信息,我们可以查看是否存在冲突、错误或过期的模块。 3. .hh:这个命令用于打开Windbg的帮助文档。在静态分析时,我们可能需要查阅文档以了解特定命令和选项的用法。 4. !heap:这个命令用于分析应用程序的堆内存。通过了解堆的使用情况,我们可以检查内存分配错误、内存泄漏或其他内存相关问题。 5. dt命令:这个命令用于查看特定类型的结构。我们可以使用它来检查内存中的对象、变量和数据结构,以了解它们的状态和值。 除了以上提到的命令,Windbg还提供了许多其他强大的调试命令,用于不同类型的分析需求。 总之,通过使用Windbg进行静态分析dump文件,我们可以了解应用程序崩溃的原因、了解调用栈信息、检查模块、解决内存相关问题等。这对于诊断和修复软件错误非常有帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值