8

次のコードがファイルに追加され、拡張子 .cs で保存されたときに、単純なシナリオで何が起こるかをよりよく理解しようとしています。

public class HelloWorld
{
  public static void Main()
  {
    System.Console.WriteLine("Hello World!");
    System.Console.ReadLine();
  }
}

そして、このプログラムは Windows コマンド ラインで次のように実行されます。

C:\Windows\Microsoft.NET\Framework\v4.0.30319>csc /t:exe /out:C:\HelloWorld\HelloWorld.exe C:\HelloWorld\HelloWorld.cs

このプロセスで .exe ファイルが生成されることがわかりますが、ウィキペディアでコンパイル プロセスについて読むと、次のように記載されています。

  1. ソース コードは共通中間言語 (CIL) に変換されます。CIL は、CPU のアセンブリ言語に相当する CLI です。
  2. 次に、CIL はいわゆるバイトコードの形式にアセンブルされ、CLI アセンブリが作成されます。
  3. CLI アセンブリの実行時に、そのコードはランタイムの JIT コンパイラを介して渡され、ネイティブ コードが生成されます...
  4. ネイティブ コードは、コンピュータのプロセッサによって実行されます。

では、.exe ファイル自体は Common Intermediate Language だけで構成されているのでしょうか? このファイル自体は、ウィキペディアの記事で「CLI アセンブリ」と呼ばれているものですか? 私は .exe ファイルしか見ることができず、「アセンブリ」という用語は複数のファイルを推測するので、少し混乱しています。

関連する質問:

  • JITコンパイラはMicrosoft.NETディレクトリのどこかにあり、.exeファイルを実行すると、ファイルはJITコンパイラと通信し、ネイティブコードで命令を出力しますか?
4

2 に答える 2

13

いいえ、そうではありません。

実行可能ファイルはPE イメージです。

詳細については、.NET アセンブリの構造 - PE ヘッダーを参照してください。

.NET アセンブリは、すべての Windows 実行可能ファイルと dll に使用される PE (Portable Executable) ファイル形式の上に構築され、それ自体が MSDOS 実行可能ファイル形式の上に構築されます。その理由は、.NET 1 がリリースされたとき、現在のようにオペレーティング システムに組み込まれていなかったからです。Windows XP より前は、.NET 実行可能ファイルを他の実行可能ファイルと同様にロードし、ネイティブ コードを実行して CLR を開始し、残りのファイルを読み取って実行する必要がありました。

于 2013-07-17T13:08:49.647 に答える
2

複数のセマンティックデータが含まれているため、アセンブリを呼び出します。

  • コード
  • マニフェスト
  • 0 個以上のモジュール

CLR アセンブリ (EXE または DLL) で DotPeek のような単純なツールを実行する手順が表示されILます。

于 2013-07-17T13:09:45.583 に答える