Udostępnij za pośrednictwem


Instrukcje: wyświetlanie zawartości zestawu

Można użyć Ildasm.exe (dezasembler IL) do wyświetlania wspólnych informacji języka pośredniego (CIL) w pliku. Jeśli badany plik jest zestawem, te informacje mogą zawierać atrybuty i odwołania zestawu do innych modułów i zestawów. Te informacje mogą być przydatne podczas określania, czy plik jest zestawem, czy częścią zestawu oraz czy plik zawiera odwołania do innych modułów lub zestawów.

Aby wyświetlić zawartość zestawu przy użyciu Ildasm.exe, wprowadź nazwę< zestawu ildasm > w wierszu polecenia. Na przykład następujące polecenie dezasembluje zestaw Hello.exe .

ildasm Hello.exe

Aby wyświetlić informacje o manifeście zestawu, kliknij dwukrotnie ikonę Manifest w oknie dezasemblera IL.

Przykład

Poniższy przykład rozpoczyna się od podstawowego programu "Hello World". Po skompilowaniu programu użyj Ildasm.exe , aby zdezasemblować zestaw Hello.exe i wyświetlić manifest zestawu.

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

Uruchomienie polecenia ildasm.exe w zestawie Hello.exe i dwukrotne kliknięcie ikony Manifest w oknie Dezasembler IL produkuje następujące dane wyjściowe:

// 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

W poniższej tabeli opisano każdą dyrektywę w manifeście zestawu Hello.exe użytym w przykładzie:

Dyrektywa Opis
.assembly extern <nazwa zestawu> Określa inny zestaw zawierający elementy, do których odwołuje się bieżący moduł (w tym przykładzie mscorlib).
Token .publickeytoken <> Określa rzeczywisty token klucza przywoływanego zestawu.
Numer wersji .ver <> Określa numer wersji przywoływnego zestawu.
.assembly nazwa zestawu <> Określa nazwę zestawu.
Algorytm hash < wartość int32> Określa używany algorytm skrótu.
Numer wersji .ver <> Określa numer wersji zestawu.
Nazwa pliku modułu <> Określa nazwę modułów tworzących zestaw. W tym przykładzie zestaw składa się tylko z jednego pliku.
Wartość podsystemu .subsystem <> Określa środowisko aplikacji wymagane dla programu. W tym przykładzie wartość 3 wskazuje, że ten plik wykonywalny jest uruchamiany z konsoli programu .
.korflagi Obecnie pole zarezerwowane w metadanych.

Manifest zestawu może zawierać wiele różnych dyrektyw, w zależności od zawartości zestawu. Aby uzyskać obszerną listę dyrektyw w manifeście zestawu, zobacz dokumentację Ecma, szczególnie "Partition II: Metadata Definition and Semantics" i "Partition III: CIL Instruction Set":

Zobacz także