剧集

碎片整理工具 #167 - 调试用户模式故障转储 Redux

在此“ 碎片整理工具”节目中,Andrew Richards 和 Chad Beeder 使用 Windows 调试工具(WinDbg)来确定安德鲁计算机上发生的各种应用程序崩溃的根本原因。 我们使用 Sysinternals ProcDump 捕获转储。

调试时,我们会在 Windows 资源管理器中为压缩和加密文件配置颜色,并使用 Sysinternals 进程监视器 来确定调试器加载 PDE 调试器扩展时为何收到拒绝访问的原因。

我们在这两集进行了类似的调查:

本集介绍如何安装适用于 Windows调试工具:

http://www.sysinternals.com中获取 Sysinternals 工具。 我们使用:

碎片整理工具 OneDrive 获取 PDE 调试器扩展

获取Microsoft公共符号服务器的符号路径:

若要在自己的计算机上收集崩溃的转储,请将 ProcDump 安装为 Postmortem (AeDebugger) 调试器:

md c:\dumps
procdump.exe -马 -i c:\dumps

在任何转储(用户或内核)上,都可以运行自动分析来查看问题:

!analyze -v

调试备忘单

  • c0000005 是访问冲突 - 使用 .ecxr & k
  • c000027b 是一个存根异常 (应用商店应用) - 使用 !pde.dse
  • e0434352 是 CLR 异常 - 使用 !sos.pe
  • e0697282 是C++异常 - 使用 .ecxr & k
  • 80000003是断点 - 使用 !analyze -v
  • 键入十进制数字时,将其前缀为“0n”
  • 键入十六进制数字时,将其前缀为“0x”(默认前缀)

常见调试器命令

.exr -1

  • 查看异常代码和异常参数
  • 看起来像 C0xxxxxx 和 80xxxxxx 的数字是 HRESULTs (错误代码)
  • 看起来类似于 7FFFxxxxxxxx 的数字通常是代码(汇编程序)地址

!地址

  • 显示地址信息 - Commited/Reserved/Free、Image/Mapped/Private
  • 用于确定数字是否为代码或数据。

  • 列出最近的地址
  • 在地址或地址附近显示符号
  • 用于确定数字是否为代码或数据。

.ecxr

  • 将调试上下文更改为异常点(而不是位于Windows 错误报告上下文中)

r

  • 查看当前上下文中的寄存器。 (.ecxr 生成相同的输出)

k

  • 查看调用堆栈

lmvm

  • 使用掩码详细查看已加载的模块
  • 查看模块的详细信息,包括文件夹、时间戳、说明、版权、产品/文件版本

|(垂直条形图或管道字符)

  • 查看可执行文件的路径(例如 c:\windows\notepad.exe)

!ext.error

  • 获取错误代码的说明。 最好描述系统错误代码。

!pde.err

  • 获取错误代码的说明。 善于描述 HRESULT (80xxxxxx 和 C0xxxxxx)

!pde.dpx

  • 抓取当前线程以获取证据(符号、结构、字符串等)

。格式

  • 以各种格式显示数字。
  • 如果数字实际上是 ASCII 文本或日期/时间,则可以轻松处理

!sos.pe

  • 显示 CLR 异常。
  • 如果存在内部异常,请单击链接以查看它。

.cordll -u & .cordll -l

  • 如果未加载 SOS,请尝试执行 CLR 支持的卸载和加载。

!peb

  • 查看进程环境块(模块、命令行、环境变量等)

!teb

  • 查看当前线程的环境块(堆栈范围、上次错误代码、上次状态代码等)

!gle

  • 获取最后一个错误
  • 显示当前线程的最后一个错误代码和最后状态代码

.cls

  • 清除屏幕。

.reload

  • 强制重新加载当前堆栈上模块的符号(下载)。

.reload /f

  • 为当前堆栈上的模块强制完全重新加载(下载)符号。

应用商店应用程序

若要查看当前安装的应用商店应用程序及其版本使用情况,请执行以下操作:

注册表编辑器(regedit.exe)

  • HKEY_CURRENT_USER\SOFTWARE\Classes\ActivatableClasses\Package

PowerShell