2012-04-08 56 views
10

我一直在用C#3.0閱讀CLR,並且一直在反思Assemblies,Modules和Headers,但事情變得複雜起來。這是我的理解,但如果將是巨大的,如果有人可以澄清的東西多一點:CLR中的模塊,程序集和頭文件

  1. 模塊是CSC.EXE的結果,其中包含IL代碼和元數據表。元數據表含有三種不同的表:

    • 定義表,如 「ModuleDef,類型定義,PropertyDef,MethodDef,EventDef,FieldDef」
    • 參考表,例如 「TypeRef,ModuleRef,MemberRef等。」
    • 清單表**
  2. 裝配體是含有許多模塊以及資源諸如圖像,文檔,PDF等

    一種代表可移植可執行文件
  3. PE文件是文件可以是容器.EXE或.DLL。這些文件具有PE32或PE32 +頭,CLR頭,元數據,IL代碼。

的書說,議會是一個容器由模塊組成的,它也說,託管模塊是

託管模塊:

一個管理模塊是一個標準的32位Microsoft Windows便攜式 可執行(PE32)文件或標準的64位Windows便攜式 可執行文件(PE32 +)需要CLR執行。

Richter,Jeffrey(2010-02-05)。 CLR通過C#(Kindle Locations 696-697)。 OReilly Media - A. Kindle Edition。大會

定義:

的組件是一個或多個模塊或資源 文件的邏輯分組。

Richter,Jeffrey(2010-02-05)。 CLR通過C#(Kindle Locations 766-767)。 OReilly Media - A. Kindle Edition。

enter image description here

如此看來,託管模塊實際上是來自同一本書拍攝的圖像在大會的一部分。

PE32頭屬於組件,但是筆者還表示,它屬於管理模塊以及等

這裏有什麼分離?他爲什麼可以互換模塊和組件,即使認爲它們看起來很分離。

受管理的PE文件有四個主要部分:PE32(+)標題,CLR 標題,元數據和IL。PE32(+)標題是Windows預期的標準 信息。 CLR頭文件是 的一個小塊,特定於需要CLR的模塊(管理的 模塊)。

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

此外,圖像清楚地表明,模塊只有元數據而不是PE32(+),CLR標題等。您認爲Manifest和Metadata可以互換使用嗎?

而且還可以請你解釋**清單表中的模塊呢?

回答

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的清單。這就是Windows需要了解的C#程序與UAC兼容的內容。您可以通過向項目添加應用程序清單文件來創建自己的清單。
  • ICON,其中包含的挑作爲一個桌面快捷方式
  • 版本的默認圖標一個圖標,包含非託管版本的資源。可見在資源管理器詳細屬性表,由編譯器從組件合成屬性中的AssemblyInfo.cs

DUMPBIN.EXE處於PE32文件的內部偷看的工具。不幸的是,它知道託管程序集,所以你看不到任何東西。

7

裏希特的書是偉大的,但「真理」在ECMA CLI standard.
定義,請檢查是否按照官方標準定義的第5章「術語和定義」。
我認爲只要看一下這些定義,就能理解不同術語之間的共同點和差異。

+0

尼斯鏈接。謝謝。 – Tarik 2012-04-08 18:28:55