0

Windows Server 2012 R2 を実行している Hyper-V VM へのパイプ シリアル接続を介して、Visual Studio カーネル モード デバッガーを使用して WDM カーネル ドライバー IOCTL をデバッグしています。Driver IOControl 内でブレークポイントに到達すると、ユーザー モードのコール スタックを表示できますか?

現時点では、カーネル スタックしか表示されません。たとえば、次のようになります。

    SIoctl!SioctlDeviceControl+0x14b [d:\workspace\ioctl\c++\sys\sioctl.c @ 320]    C/C++/ASM
    nt!IovCallDriver+0x3cd  C/C++/ASM
    nt!IopXxxControlFile+0x8d2  C/C++/ASM
    nt!NtDeviceIoControlFile+0x56   C/C++/ASM
    nt!KiSystemServiceCopyEnd+0x13  C/C++/ASM
    ntdll!NtDeviceIoControlFile+0xa C/C++/ASM
    KERNELBASE!DeviceIoControl+0x73 C/C++/ASM
    KERNEL32!DeviceIoControl+0x80   C/C++/ASM
    0x9c402408  C/C++/ASM
>   0x0000005e`2f5af9c8 C/C++/ASM
4

2 に答える 2

0

はい、最初に目的のプロセスに切り替える必要があります。その後、そのスタックにアクセスできます。参照.process:

この.processコマンドは、プロセス コンテキストとして特定のユーザー モード プロセスを使用するようにカーネル デバッガーに指示します。この使用にはいくつかの影響がありますが、最も重要なのは、デバッガーがこのプロセスの仮想アドレス空間にアクセスできることです。デバッガーは、このプロセスのページ テーブルを使用してすべてのユーザー モード メモリ アドレスを解釈するため、このメモリを読み書きできます。

ライブ デバッグを実行している場合は、/iまたは/pパラメータを使用する必要があります。これらのパラメーターのいずれかがないと、ユーザー モードまたはセッション メモリを正しく表示できません。パラメータは/i、ターゲット プロセスをアクティブにします。このオプションを使用する場合、このコマンドを有効にするには、ターゲットを 1 回実行する必要があります。再度実行すると、プロセス コンテキストが失われます。この/pパラメーターは、forcedecodeuser 設定を有効にします。(forcedecodeuser オプションが既にアクティブな場合は、使用する必要はありません/p。) プロセス コンテキストと forcedecodeuser 状態は、ターゲットが再度実行されるまでのみ残ります。

Visual Studio について質問されたことは承知しており、私は WinDbg について回答しました。仕事に適したツールを使うべきだと思います。デバッグに関しては、WinDbg ははるかに柔軟で強力です。VS ではProcess contextを使用すると思いますが、WinDbg を使用することをお勧めします。

于 2014-12-03T12:26:15.717 に答える
0

!process 0 0 app.exe を使用してから .process /i pid または .process /P id を実行してみましたが、どちらもユーザー スタックを表示できません。カーネルドライバー内にあるとはいえ、すでにそのプロセスにいるためだと思いますが、実行中のプロセスはapplication.exeです。そのため、コール スタック ウィンドウを見るか、k と入力すると、カーネル スタックしか表示されません。

異なるプロセスへの「切り替え」の「ビジュアルスタジオの方法」は機能していないようです。私ができる唯一のことは、異なるスタックフレームを歩き回ることです(カーネルスタック内のみ-コールスタックウィンドウに表示されるのと同じ)。

WinDbg で実行してみて、何か違うかどうかを確認します。

編集:

コンテキストを切り替えた後、!threads を実行し、次に .thread を表示された 1 つのスレッドに切り替えた後、スリープ コール内で動作するようになりました。どういうわけか、私の IOCTL では機能しません。しかし、私は今 WinDbg を使って試してみました。

どうもありがとう!

于 2014-12-03T16:39:00.940 に答える