標籤:style blog http color io os 使用 ar for
繼續上一篇"C#程式集系列01,用記事本編寫C#,IL代碼,用DOS命令編譯器集,運行程式",在F盤的as檔案夾中已經有了若干程式集。本篇體驗使用記事本查看可執行程式集的IL代碼。
→開啟"VS2012開發人員命令提示",輸入如下命令,並按斷行符號
在as檔案夾中多了1.txt和1.res這2個檔案
→輸入如下命令開啟1.txt
// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.18020
// Metadata version: v4.0.30319
.assembly extern mscorlib
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 4:0:0:0
}
.assembly extern MyClass
{
.ver 0:0:0:0
}
.assembly MainClass
{
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 )
.custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx
63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows.
.hash algorithm 0x00008004
.ver 0:0:0:0
}
.module MainClass.exe
// MVID: {73BA142E-F5C9-4C2E-8963-DB7213CB466A}
.imagebase 0x00400000
.file alignment 0x00000200
.stackreserve 0x00100000
.subsystem 0x0003 // WINDOWS_CUI
.corflags 0x00000001 // ILONLY
// Image base: 0x00560000
// =============== CLASS MEMBERS DECLARATION ===================
.class private auto ansi beforefieldinit MainClass
extends [mscorlib]System.Object
{
.method private hidebysig static void Main() cil managed
{
.entrypoint
// 代碼大小 8 (0x8)
.maxstack 8
IL_0000: nop
IL_0001: call void [MyClass]MyClass::PrintSth()
IL_0006: nop
IL_0007: ret
} // end of method MainClass::Main
.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
{
// 代碼大小 7 (0x7)
.maxstack 8
IL_0000: ldarg.0
IL_0001: call instance void [mscorlib]System.Object::.ctor()
IL_0006: ret
} // end of method MainClass::.ctor
} // end of class MainClass
// =============================================================
// *********** 反組譯碼完成 ***********************
// 警告: 建立了 Win32 資源檔 1.res
以上,
○ .assembly extern mscorlib,表示在CLR運行時需要引用mscorlib這個.NET預設程式集
○ .assembly extern MyClass,表示在CLR運行時需要引用MyClass這個自訂程式集
○ .assembly MainClass語句塊,包含了MainClass這個程式集的Manifest清單
○ .module MainClass.exe,表示MainClass這個程式集有一個module,名稱是MainClass.exe,當然一個程式集可以包含多個module
C#程式集系列02,使用記事本查看可執行程式集的IL代碼