windbg指令-!drvobj

本文介绍如何使用Windbg调试Windows驱动程序,包括使用!drvobj、!devobj和!devstack命令获取驱动及其设备对象信息的方法,以及如何设置断点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

!drvobj
!devobj
!podev
!devstack

"!drvobj Driver Name | PDRIVER_OBJECT pointer" 列出这个驱动创建的所有设备。

kd> !drvobj /Driver/i8042prt
Driver object (82158040) is for:
 /Driver/i8042prt
Driver Extension List: (id , addr)

Device Object list:
8213c3d0  82153738 

当你有了一个设备列表,传入设备指针给!devobj或!devstack来得到更多信息。

 kd> !devobj 8213c3d0 
Device object (8213c3d0) is for:
  /Driver/i8042prt DriverObject 82158040
Current Irp 00000000 RefCount 0 Type 00000027 Flags 00002004
DevExt 8213c488 DevObjExt 8213c768
ExtensionFlags (0xe0000000)  DOE_RAW_FDO, DOE_BOTTOM_OF_FDO_STACK,
                             DOE_DESIGNATED_FDO
AttachedDevice (Upper) 8213c250 /DRIVER/VERIFIER
AttachedTo (Lower) 8213c820 /DRIVER/VERIFIER
Device queue is not busy.


如果设备是一个pnp设备对象(FDO, PDO, filter, doesn't matter),!devstack显示设备的全部堆栈。

以上参考 http://blogs.msdn.com/doronh/archive/2006/03/15/552301.aspx

dt nt!_IRP 显示IRP数据结构

kd> dt nt!_IRP
   +0x000 Type             : Int2B
   +0x002 Size             : Uint2B
   +0x004 MdlAddress       : Ptr32 _MDL
   +0x008 Flags            : Uint4B
   +0x00c AssociatedIrp    : __unnamed
   +0x010 ThreadListEntry  : _LIST_ENTRY
   +0x018 IoStatus         : _IO_STATUS_BLOCK
   +0x020 RequestorMode    : Char
   +0x021 PendingReturned  : UChar
   +0x022 StackCount       : Char
   +0x023 CurrentLocation  : Char
   +0x024 Cancel           : UChar
   +0x025 CancelIrql       : UChar
   +0x026 ApcEnvironment   : Char
   +0x027 AllocationFlags  : UChar
   +0x028 UserIosb         : Ptr32 _IO_STATUS_BLOCK
   +0x02c UserEvent        : Ptr32 _KEVENT
   +0x030 Overlay          : __unnamed
   +0x038 CancelRoutine    : Ptr32   
   +0x03c UserBuffer       : Ptr32 Void
   +0x040 Tail             : __unnamed

bu driverName!DriverEntry, 其中driverName是驱动的名字,DriverEntry是需要中断的函数名,这样如果驱动运行,就会在DriverEntry处停止。
bp MyDriver!xyz  这个断点设在模块中的一个名字(<module>!<name>);
bp f89adeaa      设置在一个给出的地址
bl 列出所有断点
bc 清除断点 后面参数是这个断点对应的数字

### 使用 WinDbg 分析蓝屏 dump 文件 #### 安装并配置 WinDbg 首先,需安装适用于 Windows 的调试工具包,其中包含了 WinDbg 调试器。可以从微软官方网站获取最新版本的 Windows SDK 和驱动开发套件 (WDK),这些软件包中均包含 WinDbg。 完成安装之后,启动 WinDbg 并设置符号文件路径以便于解析系统组件名称。这一步骤至关重要,因为符号文件能帮助识别具体的函数名和变量位置,从而更容易理解崩溃现场的情况[^2]。 ```plaintext .sympath SRV*c:\symbols*http://msdl.microsoft.com/download/symbols .reload /f ``` 上述命令设置了本地缓存目录 `c:\symbols` 同时指定了 Microsoft 符号服务器作为远程源。`.reload /f` 则强制重新加载所有模块及其对应的符号表。 #### 打开 Dump 文件 通过菜单栏中的 "File -> Open Crash Dump..." 或者快捷键 Ctrl+D 导入之前收集到的内存转储 (.dmp) 文件。一旦成功载入,WinDbg 将尝试读取并解释此文件的内容。 #### 进行基本分析 输入以下命令让 WinDbg 自动化地对当前上下文做出评估: ```plaintext !analyze -v ``` 这条指令会触发详细的故障诊断过程,并给出关于此次崩溃事件尽可能详尽的信息,包括但不限于引发异常的具体进程、线程状态以及可能存在的根本原因等[^3]。 如果初次运行未能提供足够的线索,则可以根据提示继续深入调查其他方面;比如检查设备驱动程序的状态(`!drvobj`)、堆栈跟踪(`kb`)或是特定 API 的行为模式等等。 #### 解决由 usbhub.sys 引起的问题 针对提到的由于 USB 驱动 (`usbhub.sys`) 所致的蓝屏情况,在获得以上基本信息的基础上,还可以特别关注与此有关的日志条目或警告信号。有时更新硬件固件或者是回滚至稳定版的操作系统补丁也能解决问题所在[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值