windbg 常用调试命令总结

引用:windows码农屠龙手册
参考官方文档:使用 WinDbg 进行调试 - Windows drivers | Microsoft Docs
寄存器含义:寄存器含义

windbg下载地址:
x64:http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/setup/WinSDKDebuggingTools_amd64/dbg_amd64.msi
x86:http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/setup/WinSDKDebuggingTools/dbg_x86.msi

配置:
C:\Program Files\WindowsApps\Microsoft.WinDbg_1.2206.19001.0_x64__8wekyb3d8bbwe

1.显示所有线程
  ~  // 显示所有线程
  ~* 

2.显示堆栈
  k  // 显示当前堆栈
  kb // 显示当前堆栈,包括显示传递给堆栈跟踪中每个函数的前三个参数
  kp // 显示当前堆栈,显示传递给堆栈回溯中的每个函数的所有参数
  ~0k // 显示第0个线程的堆栈,主线程
  
3.反汇编
  view->disassmebly  // 打开反汇编窗口
  u [address]   // 查看某个地址的反汇编代码
  u [func]      // 查看某个函数的反汇编代码

4.
  r ebp  //查看寄存器的指针地址
  dv  // 显示局部变量

5.调试
  t // 下一步,可进入函数体
  p // 下一步,可跳过函数体
  g // 继续go, F5
  tb // 执行到下一个分支
  tc // 执行到下一个函数

6.常用命令
  !analyze -v     // 分析
  .ecxr               // 查看当前异常的上下文信息、和部分寄存器信息
  .exr -1
  .frame 数字 // 跳到对应的栈帧
  lmvm "模块名" // 显示该模块的详细信息
  kb     // 显示堆栈崩溃,具体到行
  .reload /i spdbicps.exe  强制关联pdb
  lmvm heap_corruption
  lmDv
  .dump /ma D:/example.dmp  // 生成dmp到指定文件夹
  dt _DPH_BLOCK_INFORMATION  地址-0x20
  dds 地址
  .load wow64exts  // [!load wow64exts] 加载wow64exts.dll模块  注:!sw就是wow64exts中的命令
  .unload wow64exts  // [!unload wow64exts] 卸载wow64exts.dll模块
  .effmach  // 查看当前调试mode:x86、x64等
  .effmach x86 // 切换到x86栈环境  注:需要先执行.load wow64exts来加载wow64exts.dll模块
  .effmach . // 切换回x64
   !cs -l  // 查看死锁
   dg  // 查看一个段选择器子所指向的段描述符的详细信息
  .formats // 在当前线程和进程的上下文中计算表达式或符号,并以多种数字格式显示它。
  !runaway 查看cpu占用
  .time //代表进程运行时间
  !process 0 0 // 查看所有进程信息
  -sa 首地址 结束地址 // 命令搜索未指定的ASCII字符串
  s -su 首地址 结束地址 // 命令搜索未指定的Unicode字符串
  ? 0y0101010 //  ? C++表达式,0x前缀(16进制)、  0n前缀(10进制)、 0t前缀(8进制)或   0y前缀2进制
  !locks   如果失败,则加载sos.dll :.load
      C:\Windows\Microsoft.NET\Framework\v4.0.30319\SOS.dll  然后 .reload

7. 下载微软符号文件
.sympath SRV*c:\mySymbols*http://msdl.microsoft.com/download/symbols
.reload

你可能感兴趣的:(软件调试,windbg)