找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

532

积分

0

好友

70

主题
发表于 昨天 04:02 | 查看: 1| 回复: 0

在Windows内核调试中,我们通常将安装了调试器的工作机称为Host,将需要被调试的目标机器称为Target。本文中,我们用DUT(Device Under Test,即被测设备)来指代需要被抓取dump的机器。

当你的目标仅仅是为了抓取一个dump文件时,操作者通常面临两种情况:

  1. 操作者本身为非软件专业人士。
  2. 操作者是软件专业人士,但出于保密或问题定位的单一目的,只需获取dump文件。

本文旨在为第一类从业者提供清晰的操作指引。我们将抓取dump的难度分为三个等级,非专业人士掌握第一级即可应对大多数场景。

(一)简单场景:Windows可正常启动并连接
在这一等级中,DUT的Windows系统可以正常启动进入桌面,但发生了难以通过系统自带机制捕获的崩溃。此时,DUT通常已预先配置好调试设置,我们只需从Host机器连接并抓取即可。

操作步骤

  • Step-000 准备:确认DUT已按调试要求配置好Windows启动参数,并通过网络(如KDNET)或串口等方式准备就绪。DUT自身无需安装WinDbg。
  • Step-001 连接:在Host机上启动WinDbg Preview,选择“Attach to kernel”(内核调试)模式,并填写DUT的连接参数(例如目标IP和端口)。点击“OK”开始连接。
  • Step-002 等待:WinDbg进入等待连接状态。此时可在DUT上触发崩溃行为。
  • Step-003 捕获:当DUT系统崩溃(如蓝屏)时,Host上的WinDbg会自动中断并建立连接。在命令窗口输入 .dump /f C:\path\to\your.dmp 即可生成完整的dump文件。
  • Step-004 后续:将生成的dump文件压缩并传递给分析人员即可。

注意事项:如果Host机可以联网,WinDbg可能会尝试自动下载符号表,在某些网络环境下可能造成延迟或失败。对于单纯抓取dump的场景,可暂时忽略符号表问题。

(二)进阶场景:Windows无法启动或未预先配置
当Windows已无法在DUT上启动,或者当初未设置调试参数时,我们需要先修改其启动配置。这通常需要访问DUT的系统盘。

  1. 可拆卸存储(如NVMe SSD):将系统盘通过读卡器连接到另一台工作机(非必需是Host)。
  2. 不可拆卸存储(如板载存储):通过WinPE启动盘启动DUT,在WinPE环境下操作系统盘。

关键操作:定位并修改BCD
核心是找到存储Windows启动配置的ESP(EFI System Partition)分区,并使用bcdedit命令修改它。在工作机(或WinPE环境)上以管理员身份打开CMD,使用mountvol命令挂载目标ESP分区。

:: 列出所有卷,找到来自DUT的ESP分区标识(如 \\?\Volume{xxx-xxx}\)
mountvol
:: 挂载该分区到某个盘符,例如H:
mountvol H: \\?\Volume{xxxx-xxxx-xxxx-xxxx}\
:: 切换到该盘符并修改BCD存储
cd /d H:\EFI\Microsoft\Boot\
:: 设置网络调试参数示例(参数需根据实际环境调整)
bcdedit /store .\bcd /set {default} debug on
bcdedit /store .\bcd /dbgsettings net hostip:169.254.1.1 port:50000 key:1.2.3.4
:: 操作完成后卸载
mountvol H: /d

此步骤已进入专业领域,操作前请务必确认目标分区,避免误改工作机自身的启动配置。

(三)复杂场景:WinPE环境崩溃
当使用USB WinPE启动盘安装或维护系统时,WinPE自身发生崩溃。此时需要修改WinPE启动盘本身的配置。

将WinPE启动盘插入Host机,假设盘符为E:

  1. 以管理员身份打开CMD,切换到WinPE盘符:cd /d E:\
  2. 根据DUT与Host的连接方式,执行相应的bcdedit命令集来配置调试。

网络连接(USB KDNET/EEM)示例:

bcdedit /store .\EFI\Microsoft\Boot\bcd /set {default} debug on
bcdedit /store .\EFI\Microsoft\Boot\bcd /dbgsettings NET HOSTIP:169.254.255.255 PORT:50000 KEY:1.2.3.4
bcdedit /store .\EFI\Microsoft\Boot\bcd /set {dbgsettings} busparams 1

串口连接示例:

bcdedit /store .\EFI\Microsoft\Boot\bcd /set {default} debug on
bcdedit /store .\EFI\Microsoft\Boot\bcd /dbgsettings serial baudrate:115200 debugport:1

具体的busparams、IP、端口、密钥等参数需要根据实际的硬件连接和网络调试环境由软件专业人士提供。

总结
掌握第一级方法,已能解决大部分“抓取dump”的需求。第二级和第三级涉及对系统启动配置的修改,需要更谨慎的操作和对系统底层机制的理解。将问题分级处理,可以让非软件专业的工程师也能在指导下完成关键故障信息的收集工作。




上一篇:C++五级GESP认证:二维前缀和算法实战,解决洛谷P2004领地选择问题
下一篇:Qt GUI开发选型:Qml与QWidget性能对比与实战避坑指南
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-9 00:47 , Processed in 0.077270 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表