Procedure: Assembly-inhoud weergeven
U kunt de Ildasm.exe (IL Disassembler) gebruiken om algemene tussentaalinformatie (CIL) in een bestand weer te geven. Als het bestand dat wordt onderzocht een assembly is, kan deze informatie de kenmerken en verwijzingen naar andere modules en assembly's van de assembly bevatten. Deze informatie kan nuttig zijn bij het bepalen of een bestand een assembly of onderdeel van een assembly is en of het bestand verwijzingen naar andere modules of assembly's heeft.
Als u de inhoud van een assembly wilt weergeven met behulp van Ildasm.exe, voert u de naam van de ildasm-assembly <> in bij een opdrachtprompt. Met de volgende opdracht wordt bijvoorbeeld de Hello.exe assembly gedemonteerd.
ildasm Hello.exe
Als u informatie over het assemblymanifest wilt weergeven, dubbelklikt u op het manifestpictogram in het venster IL Disassembler.
Opmerking
Het volgende voorbeeld begint met een eenvoudig Hallo wereld-programma. Nadat u het programma hebt geassembleerd, gebruikt u Ildasm.exe om de Hello.exe assembly te demonteren en het assemblymanifest weer te geven.
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
Als u de opdracht ildasm.exe uitvoert op de Hello.exe assembly en dubbelklikt u op het manifestpictogram in het venster IL Disassembler, wordt de volgende uitvoer gegenereerd:
// 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
De volgende tabel beschrijft elke instructie in het assemblymanifest van de Hello.exe assembly die in het voorbeeld wordt gebruikt:
Richtlijn | Beschrijving |
---|---|
.assembly extern <assemblynaam> | Hiermee geeft u een andere assembly op die items bevat waarnaar wordt verwezen door de huidige module (in dit voorbeeld mscorlib ). |
.publickeytokentokentoken <> | Hiermee geeft u het token van de werkelijke sleutel van de assembly waarnaar wordt verwezen. |
.ver-versienummer <> | Hiermee geeft u het versienummer van de assembly waarnaar wordt verwezen. |
.assembly assembly <name> | Hiermee geeft u de assemblynaam. |
.hash-algoritme <int32-waarde> | Hiermee geeft u het hash-algoritme dat wordt gebruikt. |
.ver-versienummer <> | Hiermee geeft u het versienummer van de assembly. |
.modulebestandsnaam <> | Hiermee geeft u de naam op van de modules waaruit de assembly bestaat. In dit voorbeeld bestaat de assembly uit slechts één bestand. |
.subsystem-waarde <> | Hiermee geeft u de toepassingsomgeving vereist voor het programma. In dit voorbeeld geeft de waarde 3 aan dat dit uitvoerbare bestand wordt uitgevoerd vanuit een console. |
.corflags | Momenteel een gereserveerd veld in de metagegevens. |
Een assemblymanifest kan een aantal verschillende instructies bevatten, afhankelijk van de inhoud van de assembly. Zie de Ecma-documentatie voor een uitgebreide lijst van de instructies in het assemblymanifest, met name "Partition II: Metadata Definition and Semantics" en "Partition III: CIL Instruction Set":
- ECMA C# en Common Language Infrastructure-standaarden
- Standaard ECMA-335 - Common Language Infrastructure (CLI)