我們先寫個最簡單的Console App,列印出一行字元:
using System;
using System.Collections.Generic;
using System.Text;
namespace ILTest
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Test App for IL");
}
}
}
編譯成功以後,得到一個exe檔案.
我們用MSIL Disassembler開啟這個.net編譯的擴充了的PE格式的EXE檔案,得到Metedata和IL.
ILTest.Program在ILDASM反編譯出來有三個方法,本別是
//方法一:
.class private auto ansi beforefieldinit ILTest.Program
extends [mscorlib]System.Object
{
} // end of class ILTest.Program
//方法二:
.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
{
// Code size 7 (0x7)
.maxstack 8
IL_0000: ldarg.0
IL_0001: call instance void [mscorlib]System.Object::.ctor()
IL_0006: ret
} // end of method Program::.ctor
//方法三:
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// Code size 13 (0xd)
.maxstack 8
IL_0000: nop
IL_0001: ldstr "Test App for IL"
IL_0006: call void [mscorlib]System.Console::WriteLine(string)
IL_000b: nop
IL_000c: ret
} // end of method Program::Main
除此之外,在這個PE32檔案中還包含一個"清單(MainFest)"的資料區塊.清單是由中繼資料表構成的另外一種集合.這些表描述了構成程式集的檔案.由程式集中的檔案實現的公用匯出的類型,以及和這些程式集關聯在一起的一些資源或者是資料檔案.
同時,在Debug檔案夾下面還產生了一個與專案檔同名的 <專案檔名>.vshost.exe檔案.這個檔案是一個提高調試效能的宿主進程,,支援部分信任調試並支援設計時錶達式計算。
另外,還包含了一個同名的pdb檔案,程式資料庫檔案,儲存著調試和項目的狀態資訊的一個檔案.從而可以對調試配置進行增量連結.當用 /ZI 或 /Zi 編譯 C/C++ 程式時或用 /debug 編譯 Visual Basic/C# 程式時將建立 PDB 檔案.對於機器碼,它駐留在 \debug 子目錄中。而對於Managed 程式碼,它駐留在 \WINDEBUG 子目錄中。