Visual Studio デバッガーで逆アセンブリ コードを表示する (C#、C++、Visual Basic、F#)
[逆アセンブル] ウィンドウには、コンパイラによって作成された命令に対応するアセンブリ コードが表示されます。 マネージド コードをデバッグする場合、これらのアセンブリ命令は、Visual Studio コンパイラによって作成された Microsoft Intermediate Language (MSIL) ではなく、Just-In-Time (JIT) コンパイラが作成したネイティブ コードに対応します。
メモ
逆アセンブリ ウィンドウを最大限に活用するには、アセンブリ言語プログラミングの基本について理解しているか、または学習する必要があります。 Intel 命令セットの参照資料は、アーキテクチャ マニュアルの第 2 巻にあります。 この資料は通常、AMD 命令セットにも適用されます。
この機能は、アドレスレベルのデバッグが有効になっている場合のみ使用できます。 スクリプトまたは SQL のデバッグには使用できません。
[逆アセンブル] ウィンドウでは、アセンブリ命令だけでなく、必要に応じて以下の情報も表示できます。
各命令が配置されているメモリ アドレス。 ネイティブ アプリケーションの場合は、実際のメモリ アドレスです。 Visual Basic または C# の場合、これは、関数の先頭からのオフセットです。
アセンブリ コードの派生元のソース コード。
コード バイト、つまり、実際のマシン語命令または MSIL 命令のバイト表現。
メモリ アドレスのシンボル名。
ソース コードに対応する行番号。
アセンブリ言語命令は、命令名の省略形である "ニーモニック" と、変数、レジスタ、定数を表す "記号" で構成されます。 各マシン語命令は 1 つのアセンブリ言語ニーモニックで表現され、任意でその後に 1 つ以上の記号が続きます。
アセンブリ コードは、プロセッサ レジスタ、またはマネージド コードの場合は、共通言語ランタイム レジスタに大きく依存します。 逆アセンブリ ウィンドウとレジスタ ウィンドウを組み合わせて使用することができ、これによりレジスタの内容を調べることができます。
マシンコード命令をアセンブリ言語ではなく未加工の数値形式で表示するには、メモリ ウィンドウを使用するか、逆アセンブリ ウィンドウのショートカット メニューから [コード バイト] を選択します。
[逆アセンブル] ウィンドウを使用する
逆アセンブリ ウィンドウを有効にするには、[ツール]、[オプション]、[デバッグ] の順に選択し、[アドレスレベルのデバッグを有効にする] を選択します。
デバッグ中に逆アセンブリ ウィンドウを開くには、[ウィンドウ]>[逆アセンブリ] を選択するか、または Alt+8 キーを押します。
メモ
実際に画面に表示されるダイアログ ボックスとメニュー コマンドは、アクティブな設定またはエディションによっては、ヘルプの説明と異なる場合があります。 設定を変更するには、 [ツール] メニューの [設定のインポートとエクスポート] をクリックします。 詳細については、「すべての設定のリセット」を参照してください。
オプションの情報の表示と非表示を切り替えるには、逆アセンブリ ウィンドウで右クリックし、ショートカット メニューで必要なオプションを設定またはクリアします。
左余白の黄色の矢印は、現在の実行ポイントを示します。 ネイティブ コードの場合、実行ポイントは CPU のプログラム カウンターに対応します。 この位置は、プログラム内で次に実行される命令を示します。
メモリ内で 1 ページずつ上下に移動する
[メモリ] ウィンドウまたは [逆アセンブル] ウィンドウでメモリの内容を表示するときに垂直スクロール バーを使用すると、メモリ空間内を上下に移動できます。
1 ページ下に (上位メモリ アドレスに) 移動するには、垂直スクロール バーのスクロール ボックスの下の部分をクリックします。
1 ページ上に (下位メモリ アドレスに) 移動するには、垂直スクロール バーのつまみの上の部分をクリックします。
垂直スクロール バーの動作が、通常とは異なることもわかります。 最近のコンピューターのアドレス空間はきわめて大きくなっており、スクロール バーのつまみをクリックして任意の位置にドラッグすると、簡単に表示範囲から外れてしまいます。 このため、つまみは "スプリング" のようになっており、ドラッグしても常にスクロール バーの中央に戻ります。 ネイティブ コード アプリケーションの場合、1 ページ単位の上下移動はできますが、自由にスクロールすることはできません。
マネージド アプリケーションの場合、逆アセンブルは単一関数に限定されており、通常どおりスクロールできます。
ウィンドウの下部に近づくほど、上位アドレスが表示されることがわかります。 上位アドレスを表示するには、上ではなく下に移動する必要があります。
1 つ上または 1 つ下の命令に移動するには
- 垂直スクロール バーの上端または下端にある矢印をクリックします。