利用windbg分析程序崩溃生成的dmp文件

Windbg是一款功能十分强大的调试工具,它设计了极其丰富的功能来支持各种调试任务,包括用户态调试、内核态调试、调试转储文件、远程调试等等。

windbg的下载:

链接: https://pan.baidu.com/s/1QHcd85qASn5ryI9mJr6A9A 提取码: mcvb 

或者:

http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/setup/WinSDKDebuggingTools/dbg_x86.msi

利用windbg分析dmp基本步骤:

 ● STEP 1:在file菜单中分别设置好Symbol file path 和 Source file path。和Image File Path (好像不用设置这个也能实现)

a. 其中Symbol file path是程序编译时所生成的pdb文件,具体到某一个.pdb文件,如:

另外想要添加网络上符号文件的引用,添加以下的内容到你的 .sympath

SRV*downstream_store*http://msdl.microsoft.com/download/symbols

使用的命令就是:

.sympath+ SRV*c:/tmp*http://msdl.microsoft.com/download/symbols

C:/tmp就是download_store,所需要的符号文件会被下载存储至此。注意这个符号服务器仅仅开放了公有的符号文件。

VS下编译时可以通过勾选编译选项来生成。生成pdb文件的方法参考:vs利用DMP文件、pdb文件查找release下的异常行号的方法_baidu_16370559的博客-CSDN博客

b Source file path则是对应的代码路径。

c. Image File Path的设置:

 ●STEP 2:打开Windbg,在file中选择open crash Dump来打开所需要调试的Dump文件。

● STEP 3:设置完这些之后,就可以在command窗口中使用Windbg的命令行来进行各种调试分析了。这里使用的是 !analyze –v

崩溃位置定位:

常用调试命令: 

 !analyze –v  自动分析  

 kv  查看堆栈

kb:显示当前线程call stack(调用栈)的内容

~*kb ,它用来显示dump中所有线程的call stack


   !runaway  显示所有线程的CPU消耗
   !handle e00 f 显示句柄详细详细
   !cs 00bcd034 临界对象
   !teb查看TEB的结构
   bp 下断点,还有条件断点
  !address 显示整个地址空间和使用摘要的信息
  dd 按字节查看

  dt 查看结构     

其他的命令
1.  x : 以通配符的方式检查一个模块内的符号地址 
    例如: x nt!Psp* (显示内核里所有以Psp开头的内核符号) 
2.  lm : 显示所有已加载的模块列表 
3.  dd : 显示一个地址起始的32位整数值(默认显示32个整数,每行4个,共8行) 
    例如: dd 1014db0 L1 (L1表示只显示一个整数) 
4.  du : 显示UNICODE形式的字符串 
5.  .formats <数字> : 以各种进制显示这个数字 
6.  !process 0 0 : 打印系统中所有进程(只在内核调试下有效) 
    !process <EPROCESS> : 显示一个进程的关键信息 
7.  !dd : 显示物理地址(只在内核调试下有效) 
8. 使用Windbg在内核调试下调试用户进程. 
    !process 0 0 列出所有进程 
    .process /p <EPROCESS> 切换到应用进程的地址空间 
    .reload /f /user 重新加载此进程用户空间的符号信息 
    .process /i /p <EPROCESS> 以入侵且禁止缓存映射地址的方式重新切换地址空间 
    bp <xxx> 下应用层断点 
9.  bl : 查看已设置的断点列表 
10. bc : 取消一个断点 
11. ba : 设定一个内存访问断点 
    例如: ba w1 0042201c 
         ba r2 0042201c 
12. r : 显示寄存器的值 
13. u : 反汇编,例如: u 401500 L9 反汇编当前地址以后的9条指令 
14. ub: 向前反汇编,例如: ub 4014f9 L2 反汇编当前地址之前的两条指令 
15. k : 显示栈回溯 
16. kp: 显示栈回溯并且显示每个函数被调用时的参数信息 
17. g : 继续执行程序 
18. dt: 显示类型结构命令 
   例如,在内核调试下: 
    dt _EPROCESS <某进程的EPROCESS首地址> 
19. 在内核调试下显示一个进程的PEB信息 
    .process <EPROCESS> 先切换到某个进程的上下文 
    dt _PEB <PEB地址> 显示进程的环境块信息 
20. ln [address] : 显示指定地址的类型信息,或临近address的符号的类型信息.address为可选. 
21. ~* kp : 显示所有线程的栈回溯 
22. ~* : 显示所有线程(同时也显示出线程的启动函数的地址) 
23. dt ntdll!*create* : 显示一个模块内的所有结构体类型名 
24. !handle : 查看句柄(表) 
25. uf <function address> : 反汇编函数 
26. !peb [address] : 显示一个进程的进程块信息 
27. !object 查看内核对象,格式如下: 
    Usage: !object [-p] | [[<Path>] | [<Address>] | [0 <TypeName>]] 
28. t : 单步跟入. tc: 单步跟入直到一个call为止. 
    tct: 单步跟入直到一个call或ret为止. tt: 单步步入直到一个ret为止. 
29. p : 单步步过. pc: 单步步过直到一个call为止. pct: 单步步过直到一个call或ret为止.

    pt: 单步步过直到一个ret为止. 
29. bu kernel32!BaseProcessStart : 设置一个延迟的以后再落实的断点 
    注: 上面这个命令常用来对还没有加载的模块内的函数设置断点。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用WinDbg Preview分析dmp文件,你可以在Microsoft Store中下载并安装WinDbg Preview应用程序\[1\]。安装Windows SDK时,也可以选择只安装WinDbg这个组件\[2\]。以下是简单分析dmp文件的步骤: 1)打开WinDbg Preview应用程序。 2)通过菜单“File”->“Open Crash Dump”打开dmp文件。 3)文件打开后,WinDbg Preview会列出产生dump文件的设备的系统版本和运行时间等相关信息\[2\]。 请注意,使用WinDbg Preview分析dmp文件可能需要一些基本的调试知识和经验。如果你在使用过程中遇到问题,建议与你周围的同事交流并请教,因为不同版本的WinDbg界面可能略有差异\[3\]。 #### 引用[.reference_title] - *1* *3* [WinDbg:入门分析 dmp 文件『一』](https://blog.csdn.net/qq_33154343/article/details/123563647)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [使用WinDbg分析Windows dump文件方法](https://blog.csdn.net/jetliu05/article/details/122467974)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值