Windowsメモリダンプ解析サービス
割り込みとトラップフレーム
本「IT談話館」は、Windowsメモリダンプの解析作業では、次のようなDKOM(Direct Kernel Object Manipulation)ベースの解析工程を採用しています。
- 「Windowsカーネルアーキテクチャー」知識を基に問題仮説を設定する。
- 上記問題仮説をC/C++とMASMの仕様を継承する「WinDbg内部解析専用言語」で独自解析コードとして実装する。
- 上記解析コードを実行し、設定した問題仮説の真偽を実証する。
- (必要に応じて)上記の工程を繰り返し、直面する問題を解決する。
前回は、収集した基礎情報を総合的に解釈し、次のような問題仮説を設定しました。
- ゲーム中にネットワークドライバ(NDIS: Network Driver Interface Specification)関連障害が発生したようだ
- 「RustClient.exe」プロセスのスレッド「0xffffe001973c3080」実行中に割り込みが発生し、そのDPC処理過程で問題が発生したようだ
- DPC処理時間は許容値を超える深刻な問題であり、HALレベルの処理ルーチンに制御が移り、最終的にシステムクラッシュに至ったようだ
- 「RustClient.exe」プロセスのスレッド「0xffffe001973c3080」は上記クラッシュの巻き添えで強制的に実行を停止されたようだ
問題仮説はあくまでも仮説にすぎませんから、その真偽を実証する必要があります。実証過程で新たな仮説が浮上することも珍しいことではありません。実務解析ではすべての仮説を一つ一つ実証することになりますが、本稿では、上記赤色の問題仮説の真偽を実証する過程のみを紹介しています。
前回は次のような割り込み情報を収集いたしました。
d1 Vector->d1 Irql->d hal!HalpTimerClockInterrupt (fffff802`50809630)
d2 Vector->d2 Irql->d hal!HalpTimerClockIpiRoutine (fffff802`508097a0)
0: kd> !idt d1
Dumping IDT: fffff802522b0080
d1: fffff80250855990 hal!HalpTimerClockInterrupt (KINTERRUPT fffff80250855900)
0: kd> !idt d2
Dumping IDT: fffff802522b0080
d2: fffff80250855890 hal!HalpTimerClockIpiRoutine (KINTERRUPT fffff80250855800)
赤色のデータは、割り込み発生時に作成されるオブジェクトを示しています。このオブジェクトを本「IT談話館」の独自解析コードで解析しますと、次のような結果が返されてきます。
00 Rip->nt!KeBugCheckEx (fffff802`509c01a0) Irql->0d
PreviousIrql->02 PreviousRip->ndis!NdisMIndicateReceiveNetBufferLists+0x825 (fffff800`9eabe585)
この実行結果は、次の問題仮説が真であることを実証しています。
- 「RustClient.exe」プロセスのスレッド「0xffffe001973c3080」実行中に割り込みが発生し、そのDPC処理過程で問題が発生したようだ
次のページでは、Windowsメモリダンプ解析作業を短縮・効率化する例を紹介します。
前へ |
次へ