WinDbg環境構築
公式のページで WinDbg のインストール方法がいくつか公開されていますが、
Windows10 or Windows11 以降であれば、PowerShell でインストールするのが簡単です。
PowerShell
winget install Microsoft.WinDbg
【手順①】DMPファイルを開く
Windows のコアダンプ(メモリダンプ)ファイルは、以下の場所に保存されます。
- 完全なメモリダンプ(ユーザ空間+カーネル空間)
ファイル名:MEMORY.DMP
場所 :C:\Windows - カーネル空間のメモリダンプ
ファイル名:MEMORY.DMP
場所 :C:\Windows - ミニダンプ
ファイル名:MiniXXXXXX-YY.dmp(XXXXXX は日付、YY は連番号)
場所 :C:\Windows\Minidump
もし、レジストリ「HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl」で
保存先を変更している場合は、そちらのパスに読み替えてください。
デバッグしたい対象のファイルをクリックするか、WinDbg を起動して対象ファイルを開きます。
以下のような画面が表示されれば、正常に読込完了です。
【手順②】シンボルストアパスの設定
次に、デバッグに必要な Windows 関連のシンボルファイルを保存するパスを設定します。
適当な場所にフォルダーを作成してください。本記事では C:\Symbols としています。
WinDbg 画面の中段下あたりにあるコマンド入力バーに、以下のように入力して設定します。
WinDbg
kd> .symfix c:\Symbols
.sympath と入力して、以下のように表示されれば設定完了です。


参考
公式「シンボル ストア パスの設定」
【手順③】解析の実行
基本的な解析は非常に簡単です。
先ほどのコマンド入力バーに以下を入力すれば、基本的な情報が全て出力されます。
WinDbg
kd> !analyze -v
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
0: kd> !analyze -v ******************************************************************************* * * * Bugcheck Analysis * * * ******************************************************************************* DRIVER_IRQL_NOT_LESS_OR_EQUAL (d1) An attempt was made to access a pageable (or completely invalid) address at an interrupt request level (IRQL) that is too high. This is usually caused by drivers using improper addresses. If kernel debugger is available get stack backtrace. Arguments: Arg1: 0000000000000068, memory referenced Arg2: 000000000000000b, IRQL Arg3: 0000000000000000, value 0 = read operation, 1 = write operation Arg4: fffff8004aacf5d4, address which referenced memory Debugging Details: ------------------ BUGCHECK_CODE: d1 BUGCHECK_P1: 68 BUGCHECK_P2: b BUGCHECK_P3: 0 BUGCHECK_P4: fffff8004aacf5d4 FILE_IN_CAB: MEMORY.DMP DUMP_FILE_ATTRIBUTES: 0x1000 FAULTING_THREAD: ffffe68a19cf2080 READ_ADDRESS: unable to get nt!PspSessionIdBitmap 0000000000000068 PROCESS_NAME: L2.bin TRAP_FRAME: fffff800269e4170 -- (.trap 0xfffff800269e4170) NOTE: The trap frame does not contain all registers. Some register values may be zeroed or incorrect. rax=0000000000000060 rbx=0000000000000000 rcx=0000000000000000 rdx=0000000000000000 rsi=0000000000000000 rdi=0000000000000000 rip=fffff8004aacf5d4 rsp=fffff800269e4300 rbp=fffff800269e4380 r8=0000000000000009 r9=ffffe68a16bb4020 r10=ffffe68a137ab020 r11=0000000000000000 r12=0000000000000000 r13=0000000000000000 r14=0000000000000000 r15=0000000000000000 iopl=0 nv up ei ng nz na pe nc amdkmdag+0x2cf5d4: fffff800`4aacf5d4 488b4008 mov rax,qword ptr [rax+8] ds:00000000`00000068=???????????????? Resetting default scope STACK_TEXT: fffff800`269e4028 fffff800`2b02ac29 : 00000000`0000000a 00000000`00000068 00000000`0000000b 00000000`00000000 : nt!KeBugCheckEx fffff800`269e4030 fffff800`2b026089 : 00000000`00000000 00000000`00000000 ffffe68a`19cf2080 00000000`00000000 : nt!KiBugCheckDispatch+0x69 fffff800`269e4170 fffff800`4aacf5d4 : fffff800`269e43d8 ffffe68a`1635e000 fffff800`269e4900 fffff800`2ae8fca1 : nt!KiPageFault+0x489 fffff800`269e4300 fffff800`4aac06af : 00000000`00000000 00000000`00000000 ffffe68a`0ff0e000 fffff800`2ae35d13 : amdkmdag+0x2cf5d4 fffff800`269e4330 fffff800`4aac0121 : ffffe68a`16361f70 ffffe68a`1635e000 00000007`0018176a 00000000`00000002 : amdkmdag+0x2c06af fffff800`269e4b10 fffff800`4a9a7a47 : fffff800`269e4ca0 ffffe68a`0fe76790 fffff800`269e4ce9 00000000`00000000 : amdkmdag+0x2c0121 fffff800`269e4b40 fffff800`4a9acf91 : fffff800`269e4c99 fffff800`2ae8fca1 00000000`00000000 fffff800`269e4ce9 : amdkmdag+0x1a7a47 fffff800`269e4bb0 fffff800`4aa2cd94 : fffff800`269e4cb8 fffff800`4a87e85a fffff800`269e4c90 ffffe68a`1379c000 : amdkmdag+0x1acf91 fffff800`269e4c20 fffff800`4aa2d6bc : ffffe68a`137cc0b0 ffffe68a`137a04e0 00000000`00000000 ffff0e52`ea9cc09b : amdkmdag+0x22cd94 fffff800`269e4c50 fffff800`4aa3277e : ffffe68a`137c8770 ffffe68a`00000000 ffffe68a`137a04e0 fffff800`00000000 : amdkmdag+0x22d6bc fffff800`269e4d50 fffff800`4aa3c8a4 : ffffe68a`1379c000 fffff800`269e4e69 00000000`00000000 00000000`00000000 : amdkmdag+0x23277e fffff800`269e4da0 fffff800`4aa2a302 : ffffe68a`1379c000 00000000`00000002 00000000`00000000 00000000`00400a02 : amdkmdag+0x23c8a4 fffff800`269e4dd0 fffff800`4a857ad4 : ffffe68a`0ff65000 fffff800`2ae6943e ffffe68a`13802000 00000000`00000000 : amdkmdag+0x22a302 fffff800`269e4e00 fffff800`36e5f69c : 00000000`00000000 00000000`00000000 ffffd400`04730d30 ffffe68a`0feea030 : amdkmdag+0x57ad4 fffff800`269e4ed0 fffff800`2af35a11 : ffffd400`04730c80 00000000`0009ed00 00000000`76f34770 ffffbd08`88eedb60 : dxgkrnl!DpiFdoMessageInterruptRoutine+0x5c fffff800`269e4f20 fffff800`2af1601d : 00000000`00000004 fffff800`2ae1073c 00000000`0000003f ffffd400`04730c80 : nt!KiInterruptMessageDispatch+0x11 fffff800`269e4f50 fffff800`2b016cdf : ffffbd08`88eedb60 ffffd400`04730c80 00000000`00000004 fffff800`2b01e540 : nt!KiCallInterruptServiceRoutine+0x16d fffff800`269e4f90 fffff800`2b016fa7 : 00000000`0019d41c 00000000`00000000 00000000`00000000 ffffe68a`00000000 : nt!KiInterruptSubDispatch+0x11f ffffbd08`88eedae0 00000000`208d765d : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!KiInterruptDispatch+0x37 00000000`0019d690 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : 0x208d765d SYMBOL_NAME: amdkmdag+2cf5d4 MODULE_NAME: amdkmdag IMAGE_NAME: amdkmdag.sys FAILURE_ID_HASH: {c753a2f9-94a6-448f-1d0e-e079b3442215} --------- |
PC(Program Counter)の amdkmdag+0x2cf5d4 とバックトレースから、
L2.bin というプログラムが、DirectX を使用した割込みハンドラ(dxgkrnl)の中で、
不正メモリアクセス(0x00000000`00000060+8 の Read)を行って Page Fault が起きている
ということが判ります。
Ryzen5 のマシンなので、あまり試験されていないのでしょうか・・・
