Windows用ドライバーのデバッグ:VirtualBox + WinDbg

まえがき



Windows XP SP2用のドライバーを作成する必要がありました。 すぐにデバッグの問題がありました。 洗練されたSoftIceを使用したり、すべてのミスをなくしたり、ロールバックしたりしたくありませんでした。 したがって、私がよく使用し、その特性が非常に満足されているVirtualBox仮想マシンと、Microsoft Windowsデバッガーを使用することが決定されました。 数時間後、Cの行がWinDbgウィンドウに喜んで現れ、「リマインダー」を作成することが決定されました。これは良い「ハウツー」であることが判明しました。 それでは始めましょう...



ハウツー



1
[ホスト-マシン]



画像



最初に、仮想マシンのCOMポートを構成する必要があります。

これを行うには、[ホストモード] [ホストパイプ]を選択し、パイプの名前を記述します(\\。\ Pipe \ com_1が望ましい)。

次に、「犠牲者」を起動します。



2
[ターゲット-車]



画像



では、boot.iniを少し変更しましょう。 最初は、ハイライトされていないのは(写真で)だけでした。

最初の行をコピーし、図のように複数の行を追加して、新しい行を追加します。

表示されない場合は、マルチ(0)ディスク(0)rdisk(0)パーティション(1)のように行を変更します\ WINDOWS =“ Microsoft Windows XP Professional RU” / noexecute = optin / fastdetect

マルチ(0)ディスク(0)rdisk(0)パーティション(1)\ WINDOWS = "Microsoft Windows XP Professional RU" / fastdetect / debug / debugport = com1 / baudrate = 115200

再起動し、最後に角かっこ内に「デバッガー付き」または「デバッガー付き」のようなものがあるオプションを2ポイントから選択します。



3
[ターゲット-車]



画像



ドライバーの「スケルトン」を作成しましょう-make.bat、SOURCES、MAKEFILEファイル:



%SystemRoot%\system32\cmd.exe /c "cd %DDK_PATH%\bin\&&setenv.bat %DDK_PATH%\&&cd E:\vbg\debug\&&build -ceZ"

copy bin\i386\*.pdb %DBG_SYM_PATH%

copy *.c %DBG_SRC_PATH%

copy *.cpp %DBG_SRC_PATH%

copy *.h %DBG_SRC_PATH%

copy *.hpp %DBG_SRC_PATH%

pause






(Eの代わりに:\ vbg \ debug \ドライバーが置かれているフォルダーの名前を入力します)



TARGETNAME=driver

TARGETPATH=bin

TARGETTYPE=DRIVER

C_DEFINES=$(C_DEFINES)

INCLUDES=C:\WINDDK\2600\inc

SOURCES=driver.cpp

RELEASETYPE=DDK



!INCLUDE $(NTMAKEENV)\makefile.def






4
[ターゲット-車]



画像



次に、driver.cppドライバー自体、メインコードの上に:



extern "C"{

#include "ntddk.h"

}

#include "struct.h"

VOID OnUnload(IN PDRIVER_OBJECT DriverObject){

DbgPrint("OnUnload called\n");

};

extern "C" NTSTATUS DriverEntry(IN PDRIVER_OBJECT theDriverObject,IN PUNICODE_STRING theRegistryPath){

AB v = {2,3};

PAB pv = &v;

_asm int 3 ;

v.a++;

pv->b++;

DbgPrint("a = %d, b = %d\n",va,vb);

theDriverObject->DriverUnload=&OnUnload;

return STATUS_SUCCESS;

}








このドライバーは、int 3割り込みでデバッガーを呼び出します。



5
[ターゲット-車]

画像



補助包含-ファイルstruct.h:



typedef struct _ab{

int a,b;

}AB, *PAB;








6
[ターゲット-車]



画像



次に、[マイコンピュータ]-> [プロパティ]-> [詳細設定]-> [環境変数]に移動し、3つの変数を追加します。

DBG_SYM_PATH-シンボルファイルが配置されるフォルダーへのパス*

DBG_SRC_PATH-コードとともに配置されるフォルダーへのパス**

DDK_PATH-DDKへのパス

** + * =次に、これらのフォルダは、ボール用に以前に作成されたディスクに配置する必要があります。



7
[ターゲット-車]



画像



これでビルドを開始できます-make.batをダブルクリックします。すべてが前もってうまくいけば、一番上に似た内容のウィンドウと、ドライバーディレクトリ内のいくつかの追加ファイルが表示されます。



8
[ホスト-マシン]



画像



デバッガーで、シンボルとコードファイルを使用してフォルダーへのパスを書き込みます(これらはボールのあるフォルダーに配置する必要があります)



9
[ホスト-マシン]



画像



実際には、デバッグにポート\\。\ Pipe \ com_1を入力します(デバッガーは耕さないと書きますが、これは割り込みまたは他のイベントをターゲットマシンで単に待機することを意味します。



10
[ターゲット-車]



画像



KmdKitリンクから道具だけでなく、カーネルを操作するためのプログラムセット[KmdKit]をダウンロードし、KmdManager(ツールフォルダーにあります)を実行します-ドライバーのインストール/開始/停止/アンインストール用のプログラム。

起動後、ドライバーへのパスを書き留めて(マウスで簡単にドラッグできます)、register + runを押します-システムがすぐにフリーズします-デバッガーが割り込みをインターセプトし、システム全体を停止したため、システムがフリーズします。 ホストマシンに移動して、次の項目を確認します。



11
[ホスト-マシン]



画像



デバッガがポップアップし、一番上に表示されたものが表示されます(表示されない場合は、少し待つ必要があります)。

手順を実行します。プログラムの最後に到達するまでF10を押し、Command-Kenelウィンドウで最後に「g」と入力してEnterキーを押します。 gを押すと、システムは自由に泳ぎ、ターゲットになります-システムのロックが解除されます。

タゲットシステムと次の段落に移動します。



12
[ターゲット-車]



画像



[停止-登録解除]をクリックします。



私が書いたようにすべてがうまくいったなら、あなたはそれをやった。 そうでない場合は、質問してください。 この情報がお役に立てば幸いです。



ご清聴ありがとうございました。



All Articles