在缺少pdb的时候如何分析dump?
windbg+ida
Windbg定位崩溃位置
- 通过windbg打开dump,并且分析dump
!analyze -v
分析:
- 分析dump:
!analyze -v
- 错误原因:读取空指针
- 错误线程:00001e04,可通过命令
~
查看线程列表,~N
切换线程,N表示线程序号 - 查看崩溃堆栈:
.ecxr;kbn
,截图上的崩溃调用堆栈 - 查看当前帧信息:
.frame N
,N为第几帧的序号,默认为0
结论:
- 由于缺少pdb无法定位具体代码,但是可以知道崩溃位置位于:
ScreenLock_mf+0x902e
,崩溃第一帧。
IDA定位大概原因(新手)
- 通过IDA打开
ScreenLock_mf.exe
(不管是exe还是dll,都选择打开模式pe.dll)
- 打开之后,切换到IDA View,并且切换至最顶部,查看镜像基址
Imagebase : 400000
。
- 通过windbg得到崩溃地址
ScreenLock_mf+0x902e
,即:Imagebase + 0x902e
=40902E - 按
G
键跳转到崩溃地址(输入的地址不含空格
)
- 在定位地址按
tab
键,即可切换到伪代码view
,确定崩溃函数。
- 查看该函数的相关引用,按tab键切换到IDA View。往上翻直至分割线。
- 双击引用的函数:
OnUdpRspMsg
,即可切换到调用崩溃函数isPackidValid
的地方,并且查看伪代码,确定上下文的伪代码。
- 打开源码,通过伪代码定位源码,检查崩溃原因。