Windows は、Portable Executation Format
.Net DLL および実行可能ファイルに を使用します。その Wiki 記事からの抜粋:
Microsoft の .NET Framework は、共通言語ランタイム (CLR) をサポートする機能を使用して PE 形式を拡張しました。追加には、CLR ヘッダーと CLR データ セクションがあります。バイナリをロードすると、OS ローダーは PE/COFF IMPORT テーブル内の参照を介して CLR に実行を渡します。次に、CLR は CLR ヘッダーとデータ セクションを読み込みます。
CLR データ セクションには、メタデータと中間言語 (IL) コードの 2 つの重要なセグメントが含まれています。
メタデータには、アセンブリ マニフェストなど、アセンブリに関連する情報が含まれています。マニフェストは、一意の識別 (ハッシュ、バージョン番号などによる)、エクスポートされたコンポーネントのデータ、広範な型情報 (Common Type System (CTS) でサポート)、外部参照、ファイルのリストなど、アセンブリを詳細に記述します。アセンブリ内。CLR 環境では、メタデータが広範囲に使用されます。
中間言語 (IL) コードは、.NET CLR の共通中間言語 (CIL) 要件を満たす、抽象化された言語に依存しないコードです。「中間」という用語は、言語間およびプラットフォーム間で互換性がある IL コードの性質を指します。この中間言語は、Java バイトコードに似ており、プラットフォームと言語が共通の .NET CLR をサポートできるようにします。IL は、オブジェクト指向プログラミング (ポリモーフィズム、継承、抽象型など)、例外、イベント、およびさまざまなデータ構造をサポートしています。
これは、Portable Execution Format について説明している MSDN の記事です。
これがその記事のパート 2 です。
その記事からの関連する抜粋:
Microsoft .NET 環境用に作成された実行可能ファイルは、何よりもまず PE ファイルです。ただし、ほとんどの場合、.NET ファイル内の通常のコードとデータは最小限です。.NET 実行可能ファイルの主な目的は、メタデータや中間言語 (IL) などの .NET 固有の情報をメモリに取得することです。
さらに、.NET 実行可能ファイルは MSCOREE.DLL に対してリンクします。この DLL は、.NET プロセスの開始点です。.NET 実行可能ファイルが読み込まれるとき、そのエントリ ポイントは通常、コードの小さなスタブです。そのスタブは、MSCOREE.DLL (_CorExeMain または _CorDllMain) 内のエクスポートされた関数にジャンプするだけです。そこから、MSCOREE が担当し、実行可能ファイルのメタデータと IL の使用を開始します。
このセットアップは、Visual Basic (.NET より前) のアプリが MSVBVM60.DLL を使用する方法に似ています。.NET 情報の開始点は IMAGE_COR20_HEADER 構造体で、現在は .NET Framework SDK の CorHDR.H と、より新しいバージョンの WINNT.H で定義されています。IMAGE_COR20_HEADER は、DataDirectory の IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR エントリによってポイントされます。
実行可能ファイルについて説明していますが、PE 形式は .Net DLL にも使用されます。
詳細については、記事自体を参照してください。ご覧のとおり、これは単純ではありません。