1

現在、Windbg からの出力を理解するのに苦労しています。

私がやろうとしているのは、特定のスレッドでキューに入れられている IRP (割り込み要求パケット) の数を調べることです。したがって、現在私が持っているものは次のとおりです。

lkd> !thread
THREAD fffffa8001fce270
IRP List:
fffffa8001cf3b60
...

したがって、これは、現在のスレッドのリストに 1 つの 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 リスト エントリを報告している理由を完全には理解していません。

私はおそらくここでスティックの間違った端を取得していますが、誰かが私を正しい方向に向けることができれば、私はそれを大いに感謝します.

ありがとう

4

1 に答える 1