Aracılığıyla paylaş


Nasıl yapılır: Derleme içeriğini görüntüleme

Dosyadaki ortak ara dil (CIL) bilgilerini görüntülemek için Ildasm.exe (IL Disassembler) kullanabilirsiniz. İncelenen dosya bir derlemeyse, bu bilgiler derlemenin özniteliklerini ve diğer modüllere ve derlemelere başvurularını içerebilir. Bu bilgiler, bir dosyanın derleme mi yoksa derlemenin bir parçası mı olduğunu ve dosyanın diğer modüllere veya derlemelere başvurular içerip taşımadığını belirlemede yararlı olabilir.

Ildasm.exe kullanarak bir derlemenin içeriğini görüntülemek için komut istemine ildasm <derleme adını> girin. Örneğin, aşağıdaki komut Hello.exe derlemesini parçalara ayırıyor.

ildasm Hello.exe

Derleme bildirimi bilgilerini görüntülemek için IL Ayrıştırıcı penceresinde Bildirim simgesine çift tıklayın.

Örnek

Aşağıdaki örnek temel bir "Merhaba Dünya" programıyla başlar. Programı derledikten sonra, Hello.exe derlemesini sökmek ve derleme bildirimini görüntülemek için Ildasm.exe kullanın.

using namespace System;

class MainApp
{
public:
    static void Main()
    {
        Console::WriteLine("Hello World using C++/CLI!");
    }
};

int main()
{
    MainApp::Main();
}
using System;

class MainApp
{
    public static void Main()
    {
        Console.WriteLine("Hello World using C#!");
    }
}
Class MainApp
    Public Shared Sub Main()
        Console.WriteLine("Hello World using Visual Basic!")
    End Sub
End Class

Hello.exe derlemesinde ildasm.exe komutu çalıştırılıp IL Ayrıştırıcı penceresinde Bildirim simgesine çift tıklanması aşağıdaki çıkışı oluşturur:

// 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 Hello
{
  .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 Hello.exe
// MVID: {7C2770DB-1594-438D-BAE5-98764C39CCCA}
.imagebase 0x00400000
.file alignment 0x00000200
.stackreserve 0x00100000
.subsystem 0x0003       // WINDOWS_CUI
.corflags 0x00000001    //  ILONLY
// Image base: 0x00600000

Aşağıdaki tabloda, örnekte kullanılan Hello.exe derlemesinin derleme bildirimindeki her yönerge açıklanmaktadır:

Yönerge Açıklama
.assembly extern <derleme adı> Geçerli modül tarafından başvuruda bulunılan öğeleri içeren başka bir derleme belirtir (bu örnekte). mscorlib
.publickeytoken <belirteci> Başvuruda bulunılan derlemenin gerçek anahtarının belirtecini belirtir.
.ver <sürüm numarası> Başvuruda bulunılan derlemenin sürüm numarasını belirtir.
.assembly <derleme adı> Derleme adını belirtir.
.hash algoritması <int32 değeri> Kullanılan karma algoritmasını belirtir.
.ver <sürüm numarası> Derlemenin sürüm numarasını belirtir.
.module <dosya adı> Derlemeyi oluşturan modüllerin adını belirtir. Bu örnekte derleme yalnızca bir dosyadan oluşur.
.subsystem <değeri> Program için gereken uygulama ortamını belirtir. Bu örnekte, 3 değeri bu yürütülebilir dosyanın bir konsoldan çalıştırıldığını gösterir.
.corflags Şu anda meta verilerde ayrılmış bir alan.

Derleme bildirimi, derlemenin içeriğine bağlı olarak bir dizi farklı yönerge içerebilir. Derleme bildirimindeki yönergelerin kapsamlı bir listesi için Ecma belgelerine bakın, özellikle "Bölüm II: Meta Veri Tanımı ve Semantiği" ve "Bölüm III: CIL Yönerge Kümesi":

Ayrıca bkz.