我目前正在努力理解 Windbg 的输出。
我想要做的是找出有多少 IRP(中断请求数据包)在特定线程中排队,所以这是我目前拥有的:
lkd> !thread
THREAD fffffa8001fce270
IRP List:
fffffa8001cf3b60
...
所以这告诉我当前线程在它的列表中有一个 IRP,它是地址。
然而,下一个命令让我有点困惑:
lkd> ??@$thread->IrpList
struct _LIST_ENTRY
[ 0xfffffa8001cf3b80 - 0xfffffa8001cf3b80 ]
+0x000 Flink 0xfffffa8001cf3b80 _LIST_ENTRY [ 0xfffffa8001fce658 - 0xfffffa8001fce658]
+0x000 Blink 0xfffffa8001cf3b80 _LIST_ENTRY [ 0xfffffa8001fce658 - 0xfffffa8001fce658]
所有这些信息都来自 _ETHREAD 结构,根据 windbg,结构中“IrpList”元素的偏移量是 0x3e8。
因此,如果线程 (_ETHREAD) 从偏移量 0xfffffa8001fce270 开始,则 IrpList 元素应位于偏移量 0xfffffa8001fce658 (0xfffffa8001fce270 + 0x3e8)
但是,我不完全理解为什么 windbg 报告偏移量 0xfffffa8001cf3b80 处的 IRP 列表条目。
我可能在这里搞错了,但如果有人能指出我正确的方向,我将不胜感激。
谢谢