重複の可能性:C#コードから
JIT出力生成アセンブリを取得しますか?
アセンブラーを学び始めました!
自分のc#
コードのアセンブリコードを表示できるかどうか知りたいですか?
たとえば、私が持っている場合:
int i;
どうやって:
- アセンブリコードを参照してください?
- アセンブリコードでそれが何をするのかを正確に特定しますか?
重複の可能性:C#コードから
JIT出力生成アセンブリを取得しますか?
アセンブラーを学び始めました!
自分のc#
コードのアセンブリコードを表示できるかどうか知りたいですか?
たとえば、私が持っている場合:
int i;
どうやって:
デバッガーを使用して、ジッターによって生成されたマシンコードを確認します。デバッグとシングルステップを開始するか、ブレークポイントを設定します。エディタウィンドウを右クリックし、[分解に移動]を選択します。または、デバッグ+ウィンドウ+逆アセンブリを使用します。使用したい他のデバッグウィンドウはレジスタとメモリで、生のCPUレジスタとメモリビューを表示します。[レジスタ]ウィンドウを右クリックして、ビューにレジスタを追加します。
そこに表示されるアセンブリコードには、いくつかの癖があります。すべてのコードはアドレス0から始まりますが、実際のアドレスはジッターのために完全に予測できないため、表示されません。しかし、それもバグを引き起こし、CALL命令のターゲットアドレスが間違っています。また、最適化されたコードはユーザーのマシンで実際に実行されるため、通常は最適化されたコードを確認する必要があります。リリースビルドに切り替えて、[ツール] + [オプション]、[デバッグ]、[一般]を使用し、[モジュールの読み込み時にJIT最適化を抑制する]オプションのチェックを外します。
アセンブラコードは通常JIT時にのみ記述されるため、特にそれについて学びたい場合は、VSデバッガを調べるのが最適です。
http://msdn.microsoft.com/en-us/library/a3cwf295.aspx
IL(中間言語)を意味する場合、これはアセンブリ言語ではありませんが、EXEまたはDLLに保存されます。それを見るための良いツールはILSpyです。