次の方法で共有


アセンブリ モードでのデバッグ

アプリケーションの C または C++ ソース ファイルがある場合は、 ソース モードでデバッグする場合、デバッガーをより強力に使用できます。

ただし、ソース デバッグを実行できない場合は何度もあります。 アプリケーションのソース ファイルがない可能性があります。 他のユーザーのコードをデバッグしている可能性があります。 完全な .pdb シンボルを使用して実行可能ファイルをビルドしていない可能性があります。 また、アプリケーションでソース デバッグを実行できる場合でも、アプリケーションが呼び出す Microsoft Windows ルーチン、またはアプリケーションの読み込みに使用される Microsoft Windows ルーチンをトレースする必要がある場合があります。

このような状況では、アセンブリ モードでデバッグする必要があります。 さらに、アセンブリ モードには、ソース デバッグには存在しない便利な機能が多数あります。 デバッガーは、メモリの場所の内容を自動的に表示し、アクセス時に登録し、プログラム カウンターのアドレスを表示します。 この表示により、アセンブリ デバッグは、ソース デバッグと共に使用できる貴重なツールになります。

逆アセンブル コード

デバッガーは、主にバイナリ実行可能コードを分析します。 このコードを生形式で表示する代わりに、デバッガーはこのコード を逆アセンブルします 。 つまり、デバッガーはコードをコンピューター言語からアセンブリ言語に変換します。

結果のコード ( 逆アセンブリ コードと呼ばれます) は、いくつかの異なる方法で表示できます。

  • u (逆アセンブル) コマンドは、機械言語の指定されたセクションを逆アセンブルして表示します。

  • uf (組み立て関数) コマンドは、関数を逆アセンブルして表示します。

  • up (物理メモリからの逆アセンブル) コマンドは、物理メモリに格納されている機械語の指定されたセクションを逆アセンブルして表示します。

  • ur(実モード BIOS を逆アセンブルするコマンド) コマンドは、指定された 16 ビットの実モード コードを逆アセンブルして表示します。

  • ux (X86 BIOS の組み立て) コマンドは、x86 ベースの BIOS コード命令セットを、指定されたアドレスで逆アセンブルして表示します。

  • (WinDbg のみ)逆アセンブル ウィンドウは、機械言語の指定されたセクションを逆アセンブルして表示します。 このウィンドウは、ウィンドウ メニューで自動的に開く逆アセンブリ コマンドを選択すると自動的にアクティブになります。 このウィンドウを開くには、ビュー メニューで逆アセンブリを選択するか、Alt + 7 キーを押すか、逆アセンブル (alt + 7) ボタンを押します。

逆アセンブリ表示は、アドレス オフセット、バイナリ コード、アセンブリ言語ニーモニック、アセンブリ言語の詳細の 4 つの列に表示されます。 次の例は、この表示を示しています。

0040116b    45          inc         ebp            
0040116c    fc          cld                        
0040116d    8945b0      mov         eax,[ebp-0x1c] 

現在のプログラム カウンターを表す行の右側に、アクセスされているメモリの場所またはレジスタの値が表示されます。 この行に分岐命令が含まれている場合、表記 [br=1] または [br=0] が 表示されます。 この表記は、それぞれ分岐が選択されているか、または選択されていないことを示します。

.asm (逆アセンブル オプションの変更) コマンドを使用すると、逆アセンブルされた命令の表示方法を変更できます。

WinDbg の逆アセンブル ウィンドウでは、現在のプログラム カウンターを表す行が強調表示されます。 ブレークポイントが設定されている行も強調表示されます。

次のコマンドを使用してアセンブリ コードを操作することもできます。

  • # (逆アセンブル パターンの検索) コマンドは、メモリの領域で特定のパターンを検索します。 このコマンドは、逆アセンブル表示の 4 つの列を検索することと同じです。

  • a (アセンブル) コマンドは、アセンブリ命令を受け取り、それらをバイナリ マシン コードに変換できます。

アセンブリ モードとソース モード

デバッガーには、 アセンブリ モード とソース モードという 2 つの異なる動作 モードがあります。

アプリケーションをシングル ステップ実行する場合、1 つのステップのサイズは、モードに応じて 1 行のアセンブリ コードまたは 1 行のソース コードになります。

いくつかのコマンドでは、モードに応じて異なるデータ表示が作成されます。

WinDbg では、アセンブリ モードでアプリケーションを実行またはステップ実行すると、Disassembly ウィンドウ が自動的に前面に表示されます。 ソース モードでは、[ ソース] ウィンドウ がフォアグラウンドに移動します。

モードを設定するには、次のいずれかの操作を行います。

  • モードを制御するには 、l+、l- (ソース オプションの設定) コマンドを使用します。 l-t コマンドは、アセンブリ モードをアクティブにします。

  • (WinDbg のみ)[デバッグ] メニューの [ソース モード] コマンドをオフにして、デバッガーがアセンブリ モードに入ります。ツール バーの [ソース モードオフ] ボタンを選択することもできます。

WinDbg では、アセンブリ モードの場合、 ASM がステータス バーに表示されます。

WinDbg の逆アセンブル ウィンドウのショートカット メニューには、現在の ソース行コマンドの強調表示の手順が 含まれています。 このコマンドは、現在のソース行に対応するすべての命令を強調表示します。 多くの場合、1 つのソース行が複数のアセンブリ命令に対応します。 コードが最適化されている場合、これらのアセンブリ命令が連続していない可能性があります。 現在のソース行コマンドの強調表示命令を使用すると、現在のソース行から組み立てられたすべての命令を見つけることができます。

アセンブリ言語ソース ファイル

アプリケーションがアセンブリ言語で記述されている場合、デバッガーによって生成される逆アセンブリが元のコードと正確に一致しない可能性があります。 特に、NO-OPs やコメントは表示されません。

元の .asm ファイルを参照してコードをデバッグする場合は、ソース モードのデバッグを使用する必要があります。 アセンブリ ファイルは、C または C++ ソース ファイルのように読み込むことができます。 この種類のデバッグの詳細については、「 ソース モードでのデバッグ」を参照してください。