1

Windows DDK のサンプル 'passthru' に基づいて単純なパケット フィルター ドライバーを作成しました。フィルター機能をオンにすると、OS がクラッシュし、WinDbg から次のメッセージが表示されました。

Microsoft (R) Windows Debugger バージョン 6.12.0002.633 X86 Copyright (c) Microsoft Corporation. 全著作権所有。

Loading Dump File [D:\iCheckTool\dump\MEMORY.DMP] Kernel Summary Dump File: カーネルアドレス空間のみ利用可能

警告: パス要素の先頭にある空白記号の検索パスは次のとおりです: D:\iCheckTool\dump; SRV*E:\DebuggingSymbols*http://msdl.microsoft.com/download/symbols;SRV*C:\MyLocalSymbols*http://192.168.20.25/zfprisymbols/ 実行可能な検索パス: Windows XP Kernel Version 2600 (Serviceパック 3) MP (2 procs) 無料 x86 互換 製品: WinNt、スイート: TerminalServer SingleUserTS ビルド: 2600.xpsp_sp3_qfe.120504-1617 マシン名: カーネル ベース = 0x804d8000 PsLoadedModuleList = 0x8055e720 デバッグ セッション時間: Tue Sep 11 09:41: 02.828 2012 (UTC + 8:00) システム稼働時間: 0 日 0:02:30.578 カーネル シンボルの読み込み .......................................... ................................................................................... ................................................... ユーザーシンボルの読み込み PEBページアウトされます (Peb.Ldr = 7ffd800c)。「.hh dbgerr001」と入力します


  • *
  • バグチェック分析 *
  • *

詳細なデバッグ情報を取得するには、!analyze -v を使用します。

バグチェック C5、{4、2、1、8054c10f}

おそらく原因: Pool_Corruption ( nt!ExDeferredFreePool+109 )

補足: Pool_corruption

1: kd> !analyze -v


  • *
  • バグチェック分析 *
  • *

DRIVER_CORRUPTED_EXPOOL (c5) 高すぎる割り込み要求レベル (IRQL) で、ページング可能な (または完全に無効な) アドレスにアクセスしようとしました。これは、システム プールを破損したドライバーが原因です。新しい (または疑わしい) ドライバーに対してドライバー検証ツールを実行し、原因が見つからない場合は、gflags を使用して特別なプールを有効にします。引数: Arg1: 00000004、メモリ参照 Arg2: 00000002、IRQL Arg3: 00000001、値 0 = 読み取り操作、1 = 書き込み操作 Arg4: 8054c10f、メモリを参照したアドレス

デバッグの詳細:

BUGCHECK_STR: 0xC5_2

現在_IRQL: 2

FAULTING_IP: nt!ExDeferredFreePool+109 8054c10f 895f04 mov
dword ptr [edi+4],ebx

DEFAULT_BUCKET_ID: DRIVER_FAULT

PROCESS_NAME: explorer.exe

trap_frame:b42555dc-(.trap 0xffffffffbb4255555555555555555555555555555555555555555555555555555502 EAX = 89CC1C60 EBX = 89E4DED8 ECX = 000001FF EDX = 89CC2A78 ESI = 80565D20 EDI = 855555555555555555555555555555555555555555555555555555 cy cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010297 nt!ExDeferredFreePool+0x109: 8054c10f 895f04 mov dword ptr [edi+4],ebx ds:0023:00000004=???? ???? デフォルトのスコープのリセット

LOCK_ADDRESS: 8055c4e0 -- (!locks 8055c4e0)

リソース @ nt!PiEngineLock (0x8055c4e0) 利用可能な競合カウント = 1 1 合計ロック

PNP_TRIAGE: ロックアドレス: 0x8055c4e0 スレッド数: 0 スレッドアドレス: 0x00000000 スレッド待機: 0x0

LAST_CONTROL_TRANSFER: 8054c10f から 80545768 へ

STACK_TEXT: b42555dc 8054c10f badb0d00 89cc2a78 b8338538 nt!KiTrap0E+0x238 b4255690 8054c75f 00000001 8055c100 00020019 nt!ExDeferredFreePool+0x109 b42556d0 8058635e 899522e8 00000000 b42557d8 nt!ExFreePoolWithTag+0x47f b42556fc 805878b8 c0000023 00000007 8058758c nt!PiGetDeviceRegistryProperty+0x108 b425578c bf879f40 8a523030 00000001 00000100 nt!IoGetDeviceProperty +0x25e b42558f8 bf879735 00000000 e1b5e008 00000000 win32k!DrvEnumDisplayDevices+0x33b b425591c 8054268c 00000000 00000000 0007ecc4 win32k!NtUserEnumDisplayDevices+0x7c b425591c 7c92e514 00000000 00000000 0007ecc4 nt!KiFastCallEntry+0xfc WARNING: Frame IP not in any known module. 次のフレームは間違っている可能性があります。0007f010 00000000 00000000 00000000 00000000 0x7c92e514

STACK_COMMAND: kb

FOLLOWUP_IP: nt!ExDeferredFreePool+109 8054c10f 895f04 mov
dword ptr [edi+4],ebx

SYMBOL_STACK_INDEX: 1

SYMBOL_NAME: nt!ExDeferredFreePool+109

FOLLOWUP_NAME: Pool_corruption

IMAGE_NAME: Pool_Corruption

DEBUG_FLR_IMAGE_TIMESTAMP: 0

MODULE_NAME: Pool_Corruption

FAILURE_BUCKET_ID: 0xC5_2_nt!ExDeferredFreePool+109

BUCKET_ID: 0xC5_2_nt!ExDeferredFreePool+109

補足: Pool_corruption

この問題の原因と修正方法を教えてもらえますか? ありがとう。

4

1 に答える 1

0

どうやら、無効なメモリ領域(アドレス= 0x4)に書き込もうとしました。これを超えて、あなたが投稿したデバッガー分析はあまり役に立ちません。デバッガーでドライバースタック(投稿されたデバッグ出力には存在しません)を見つけて、失敗したコードを取得することができますが、それは保証されていません。これを攻撃する他の方法には、コードにデバッグプリントを追加し、DbgViewでキャプチャすることが含まれます(後でメモリダンプから抽出できます)。また、カーネルデバッガーに接続して、エラーが発生したときにエラーをキャッチすることもできます。

于 2012-10-18T21:16:02.400 に答える