| 值 | 子系統 |
|---|---|
| 2 | Windows Character (Console) |
| 3 | Windows GUI |
| 5 | OS/2 等舊系統 |
對應 C# 編譯器 /target:exe (Console, 值 3) vs /target:winexe (GUI, 值 2)。
1:IL 編譯產生的可執行檔64:Library (DLL)CorFlags.exe 工具顯示的標誌位.assembly 指令.hash、.ver、.publickey 等
.assembly MyLib {
.hash algorithm 0x00008004 // SHA1
.ver 1:2:3:4
}
四段式:Major:Minor:Build:Revision,對應 AssemblyVersionAttribute。
.assembly extern mscorlib {
.publickeytoken = (B7 7A 5C 56 19 34 E0 89) // 公開金鑰 Token
.ver 4:0:0:0
}
mscorlib 為核心庫,幾乎所有組件都參考包含公開金鑰的 8 位元組雜湊值,用於強名稱驗證。
// a.cs
class Program {
public static void Main() {
System.Console.WriteLine("hi");
}
}
csc a.cs
// 產生 a.exe
ildasm /out=a.il a.exe
// 產生 a.il (IL 組合語言) 與 a.res (資源)
.module a.exe
.subsystem 3 // GUI 子系統 (預設)
.corflags 1 // IL 可執行檔
.assembly extern mscorlib {
.publickeytoken = (B7 7A 5C 56 19 34 E0 89)
.ver 4:0:0:0
}
.assembly a {
.hash algorithm 0x00008004
.ver 0:0:0:0
}
.class private auto ansi Program extends [mscorlib]System.Object {
.method public hidebysig static void Main() cil managed {
.entrypoint
.maxstack 8
ldstr "hi"
call void [mscorlib]System.Console::WriteLine(string)
ret
}
}
ilasm /dll /key=mykey.snk a.il
// 產生 a.dll (若原為 exe 霻調整 .subsystem/.corflags)
| 工具 | 用途 |
|---|---|
| csc | C# 編譯器 |
| ildasm | IL 反組譯器 (Managed → IL) |
| ilasm | IL 組譯器 (IL → Managed) |
| CorFlags | 檢視/修改組件標誌 |
| sn | 強名稱金鑰管理 |
| peverify | 驗證 IL 類型安全 |
ildasm → 閱讀 IL → ilasm 重組 → peverify 驗證.maxstack、.locals、ldarg/ldloc/stloc、call/callvirt、newobj、box/unbox