dump 定位分析

在缺少pdb的时候如何分析dump?

windbg+ida

Windbg定位崩溃位置

  1. 通过windbg打开dump,并且分析dump !analyze -v
    dump 定位分析_第1张图片

分析:

  • 分析dump: !analyze -v
  • 错误原因:读取空指针
  • 错误线程:00001e04,可通过命令~查看线程列表,~N切换线程,N表示线程序号
  • 查看崩溃堆栈:.ecxr;kbn,截图上的崩溃调用堆栈
  • 查看当前帧信息:.frame N,N为第几帧的序号,默认为0

结论:

  • 由于缺少pdb无法定位具体代码,但是可以知道崩溃位置位于:ScreenLock_mf+0x902e,崩溃第一帧。

IDA定位大概原因(新手)

  1. 通过IDA打开ScreenLock_mf.exe(不管是exe还是dll,都选择打开模式pe.dll)
    dump 定位分析_第2张图片
  2. 打开之后,切换到IDA View,并且切换至最顶部,查看镜像基址Imagebase : 400000
    dump 定位分析_第3张图片
  3. 通过windbg得到崩溃地址ScreenLock_mf+0x902e,即:Imagebase + 0x902e=40902E
  4. G键跳转到崩溃地址(输入的地址不含空格
    dump 定位分析_第4张图片
  5. 在定位地址按tab键,即可切换到伪代码view,确定崩溃函数。
    dump 定位分析_第5张图片
  6. 查看该函数的相关引用,按tab键切换到IDA View。往上翻直至分割线。
    dump 定位分析_第6张图片
  7. 双击引用的函数:OnUdpRspMsg,即可切换到调用崩溃函数isPackidValid的地方,并且查看伪代码,确定上下文的伪代码。
    dump 定位分析_第7张图片
  8. 打开源码,通过伪代码定位源码,检查崩溃原因。

你可能感兴趣的:(C++,随笔,IDA,windbg,dump,ida,windbg,崩溃)