2012-04-08 8 views
10

私はC#3.0でCLRを読んできましたが、アセンブリ、モジュール、ヘッダーに反映されてきましたが、状況は複雑になりました。これは私が理解したが、何で誰かが少しより多くの事を明確にすることができた場合素晴らしいことだ場合:CLRのモジュール、アセンブリ、ヘッダー

  1. モジュールは、ILコードとメタデータテーブルを含むcsc.exeの結果です。メタデータテーブルは3つの異なるテーブル含まれています "などTypeRef、ModuleRef、MemberRef、" などのような "ModuleDef、型定義、PropertyDef、MethodDef、EventDef、FieldDef"

  2. 参照表として

    • 定義テーブルを
    • マニフェストの表は、**
  3. アセンブリは、などポータブル実行の略

  4. PEファイルは、ファイルができている画像、ドキュメント、PDF、できるだけ多くのモジュールと同様にリソースが含まれているコンテナであります.EXEまたは.DLL。これらのファイルには、PE32またはPE32 +ヘッダー、CLRヘッダー、メタデータ、ILコードがあります。

冊総会は、コンテナがモジュールで構成されていると、それはまた、マネージモジュールは

マネージモジュールであると言う言葉:

Aモジュールは、標準の32ビットのMicrosoft Windowsポータブルで管理 実行可能ファイル(PE32)または標準の64ビットWindows移植可能ファイル 実行可能ファイル(PE32 +)で、CLRを実行する必要があります。

Richter、Jeffrey(2010-02-05)。 CLR via C#(Kindle Locations 696-697)。オーケーメディア - A. Kindle Edition。

議会の定義:

アセンブリは、1つまたは複数のモジュールまたはリソース ファイルの論理グループです。

Richter、Jeffrey(2010-02-05)。 CLR via C#(Kindle Locations 766-767)。オーケーメディア - A. Kindle Edition。

enter image description here

だから、マネージモジュールが実際に同じ本から撮影した画像における議会の一部であるようです。

PE32ヘッダーがアセンブリに属している、しかし、著者はまた、など

分離はここで何、それは同様のモジュールを管理するために属していると言いますか?なぜ彼はモジュールとアセンブリを使い分けることができるのですか?

PEファイルには、PE32(+)ヘッダー、CLR ヘッダー、メタデータ、およびILの4つの主要部分があります。PE32(+)ヘッダは、Windowsが予期している標準 の情報です。 CLRヘッダーは、CLR(管理された モジュール)を必要とするモジュールに固有の 情報の小さなブロックです。

Richter、Jeffrey(2010-02-05)。 CLR via C#(Kindle Locations 1628-1629)。 OReilly Media - A. Kindle Edition。

また、画像には、PE32(+)、CLRヘッダーなどではないメタデータのみが含まれていることが明瞭に示されています。マニフェストとメタデータを同じ意味で使用できると思いますか?

また、モジュールのマニフェストテーブルも説明できますか?

答えて

6

あなたが投稿した内容は、管理されたアセンブリがPE32ファイルにどのように埋め込まれているかを少し恥じています。もともとネイティブの実行可能コードとリソースを格納するように意図されていたが、データを格納するのに十分な柔軟性を持つ、非常に柔軟なフォーマットです。これは、実際にはアセンブリがWindowsの観点から見たものです。そのデータを実行可能なものにすることができるのはCLRだけです。

PE32ファイルには、アセンブリ以上のものが含まれています。実際にはネイティブコードもあります。純粋に管理されたアセンブリの場合は5バイトです。これは、管理されたコードのブートストラップであるmscoree.dllへのジャンプ命令を持っています。 EXEに_CorExeMainへのジャンプが含まれ、DLLに_CorDllMainへのジャンプが含まれています。これは、混合モードアセンブリ用にさらに拡張されています.System.Data.dllとPresentationCore.dllはそれらの例です。彼らにはネイティブコードの大きなチャンクがあり、コードはマネージクラスでラップされています。 C++/CLIコンパイラとリンカは、そのようなアセンブリを作成する方法です。 .textセクションにコードが含まれています。.relocセクションには、DLLがメモリ内の任意のアドレスにロードされるのを助ける再配置情報が含まれています。

ほとんどのPE32ファイルには、アンマネージドリソースも含まれています。 Windowsが理解できる形式。これは.rsrcセクションに格納されています。たとえば、C#コンパイラは自動的にそこにリソースを作成します。これは/ win32resオプションで上書きすることができます。 File + Open + Fileでこれを確認し、アセンブリを選択することができます。

  • RT_MANIFESTには、リソースID 1のマニフェストが含まれています。これは、C#プログラムがUACと互換性があることをWindowsが理解する必要があります。プロジェクトにアプリケーションマニフェストファイルを追加して、独自のマニフェストを作成します。
  • アイコン、デスクトップショートカットのデフォルトアイコンとして選択されたアイコンが1つ含まれます。
  • バージョンには、アンマネージバージョンのリソースが含まれています。 AssemblyInfo.csのアセンブリ属性からコンパイラによって合成されたエクスプローラの詳細プロパティシートに表示されます

Dumpbin.exeは、PE32ファイルの内部を覗くためのツールです。残念ながら、管理されたアセンブリについて知っているので、すべてを見ることはできません。

7

リヒターの本は素晴らしいですが、「真実は」公式の標準に従って定義については、第5章「用語及び定義」をご確認くださいECMA CLI standard.
で定義されています。
定義を見ていると、異なる用語の共通点と相違点が分かります。

+0

ニースのリンク。ありがとう。 – Tarik