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
[ターゲット-車]

画像

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

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

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

Source: https://habr.com/ru/post/J130213/


All Articles