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ę Manifestu 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 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
Uruchomienie polecenia ildasm.exe w zestawie Hello.exe i dwukrotne kliknięcie ikony manifestuw oknie Dezasembler IL generuje 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żywanym w przykładzie:
Dyrektywa | opis |
---|---|
Nazwa zestawu .assembly extern <> | 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 token rzeczywistego klucza przywoływnego zestawu. |
Numer wersji .ver <> | Określa numer wersji przywoływnego zestawu. |
Nazwa zestawu zestawu .assembly <> | Określa nazwę zestawu. |
Wartość algorytmu <hash int32> | Określa używany algorytm wyznaczania 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 . |
.corflags | 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":
- Standardy ecMA C# i infrastruktury języka wspólnego
- Standardowa ECMA-335 — infrastruktura języka wspólnego (CLI)