1. ホーム
  2. c#

[解決済み] C#コンパイラが生成したMSIL/CILを表示するにはどうすればよいですか?なぜアセンブリと呼ばれるのですか?

2022-05-13 03:47:47

質問

私は、.NET C#プログラミングの初心者です。いくつかの本に従っています。C#のコードを直接マシンコードにコンパイルするのではなく、中間言語(MSIL aka CILと呼ばれる)に変換されると言われています。しかし、私がコンパイルするとき、私はexe/dllファイルを取得します。

  1. この MSIL/CIL は、これらの exe/dll ファイルに含まれているのでしょうか。
  2. その中間言語コードの存在を知るために、そのコードを見たいのです。どのようにすれば見ることができますか。
  3. 彼らはこのexe/dllファイルを assembly . ネイティブ/マシン コードを含む exe/dll ファイルと区別するために、この「派手な言葉」を使っているのでしょうか。

どのように解決するのですか?

  1. そうです、より正確には .text セクションにあります。 PE ファイル (ポータブル実行ファイル = *.exe または *.dll)。より詳細な情報は はこちら .
  2. 最適なのは ILSpy を使うことです (Reflector はもう無料ではありません)。これはフリーのディスアセンブラで、アセンブリをMSILだけでなくC#やVBにも(ある程度)分解することができます。.NET Framework SDK には、公式の MSIL ディスアセンブラである ILDasm が含まれています。
  3. 基本的にはそうです。アセンブリは、MSIL コードと対応するメタデータを含むファイルです。これは PE ファイル自体に制限されるものではありませんが、現在のすべての CLR 実装はそれらを使用します。

この件に関しても良い本を紹介させていただくと、Serge Lidin著「Expert .NET 2.0 IL Assembler」です。彼は MSIL を設計した人です。