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