.subsystem: 這個指 令用於指定可執行體運行在什麼操作系統上。這是另一種指定可執行體所代表的種類的方式。一些數字值 和它們對應的操作系統如下所示:
2 - A Windows Character 子系統。
3 - A Windows GUI 子系統。
5 – 像OS/2這樣的老系統。
.corsflags: 這個偽指令用於指定對於64 位計算機唯一的標志。值1表示它是從il中創建的可執行文件,而值64表示一個庫。
.assembly: 在前面,我們曾經簡單涉及過一個名為.assembly的指令。現在讓我們進行深入的研究。
無論我們 創建了什麼,都是一個稱為清單(manifest)的實體的一部分。.assembly偽指令標注了一個清單的開始 位置。在層次上,模塊是清單最小的實體。.assembly偽指令指定了這個模塊屬於哪個程序集。模塊只能 包括一個單獨的.assembly偽指令。
對於exe文件,這個偽指令的存在是必須的,但是,對於.dll 中的模塊,則是可選的。這是因為,我們需要使用這個偽指令來創建一個程序集。這是.Net的基本需要。 程序集偽指令包括了其它偽指令。
.hash: 散列計算是一門在計算機世界中通用的技術,這裡有大 量使用到的散列方法或算法。這個偽指令用於散列計算。
.ver: .ver:偽指令包括了4個由冒號分 割的數字。按照下面給定的順序,它們代表了下面的信息:
主版本編號
次版本編號
內部版本號
修訂版本號
extern: 如果有涉及到其它程序集的需求,就要使用到 extern偽指令。.Net核心類的代碼位於mscorlib.dll中。除了這個dll之外,當我們的程序需要涉及到大 量其它的dll時,extern偽指令就要排上用場了。
originator: 在轉移到解釋上面程序的本質和意 義之前,這是我們要研究的最後一個偽指令。這個偽指令揭示了創建該dll的標識。它包括了dll的所有者 公鑰的8個字節。它顯然是一個散列值。
讓我們以一種不同的方式一步一步地溫習到目前為止我們 所做的事情。
(a)我們開始於一個我們能夠編寫的最簡單的程序。這個程序被稱為a.cs,並包括 了下面的代碼:
a.cs
class zzz
{
public static void Main()
{
System.Console.WriteLine("hi");
}
}
(b)然後我們使用下面的命令運行C#編譯器。
>csc a.cs
因此,會創建名為a.exe的exe文件。
(c)在可執行體中,我們運行一個名為 ildasm的程序,它是由Microsoft提供的:
>ildasm /out=a.txt a.exe