剧集
碎片整理工具 #167 - 调试用户模式故障转储 Redux
在此“ 碎片整理工具”节目中,Andrew Richards 和 Chad Beeder 使用 Windows 调试工具(WinDbg)来确定安德鲁计算机上发生的各种应用程序崩溃的根本原因。 我们使用 Sysinternals ProcDump 捕获转储。
调试时,我们会在 Windows 资源管理器中为压缩和加密文件配置颜色,并使用 Sysinternals 进程监视器 来确定调试器加载 PDE 调试器扩展时为何收到拒绝访问的原因。
我们在这两集进行了类似的调查:
本集介绍如何安装适用于 Windows 的调试工具:
从 http://www.sysinternals.com中获取 Sysinternals 工具。 我们使用:
从碎片整理工具 OneDrive 获取 PDE 调试器扩展
获取Microsoft公共符号服务器的符号路径:
- 通过环境变量
setx /m _NT_SYMBOL_PATH SRV*C:\My\Sym*https://msdl.microsoft.com/download/symbols - 在调试器中
.sympath SRV*C:\My\Sym*https://msdl.microsoft.com/download/symbols
若要在自己的计算机上收集崩溃的转储,请将 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
在此“ 碎片整理工具”节目中,Andrew Richards 和 Chad Beeder 使用 Windows 调试工具(WinDbg)来确定安德鲁计算机上发生的各种应用程序崩溃的根本原因。 我们使用 Sysinternals ProcDump 捕获转储。
调试时,我们会在 Windows 资源管理器中为压缩和加密文件配置颜色,并使用 Sysinternals 进程监视器 来确定调试器加载 PDE 调试器扩展时为何收到拒绝访问的原因。
我们在这两集进行了类似的调查:
本集介绍如何安装适用于 Windows 的调试工具:
从 http://www.sysinternals.com中获取 Sysinternals 工具。 我们使用:
从碎片整理工具 OneDrive 获取 PDE 调试器扩展
获取Microsoft公共符号服务器的符号路径:
- 通过环境变量
setx /m _NT_SYMBOL_PATH SRV*C:\My\Sym*https://msdl.microsoft.com/download/symbols - 在调试器中
.sympath SRV*C:\My\Sym*https://msdl.microsoft.com/download/symbols
若要在自己的计算机上收集崩溃的转储,请将 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
想提供反馈? 在此处提交问题。