Postupy: Zobrazení obsahu sestavení
Pomocí Ildasm.exe (IL Disassembler) můžete zobrazit informace o běžném zprostředkujícím jazyce (CIL) v souboru. Pokud je soubor zkoumán sestavením, mohou tyto informace zahrnovat atributy sestavení a odkazy na jiné moduly a sestavení. Tyto informace mohou být užitečné při určování, zda je soubor sestavení nebo součástí sestavení a zda soubor obsahuje odkazy na jiné moduly nebo sestavení.
Chcete-li zobrazit obsah sestavení pomocí Ildasm.exe, zadejte název> sestavení ildasm <na příkazovém řádku. Například následující příkaz rozebere sestavení Hello.exe .
ildasm Hello.exe
Chcete-li zobrazit informace o manifestu sestavení, poklikejte na ikonu Manifest v okně IL Disassembler.
Příklad
Následující příklad začíná základním programem "Hello World". Po kompilaci programu použijte Ildasm.exe k demontáži Hello.exe sestavení a zobrazení manifestu sestavení.
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
Spuštění příkazu ildasm.exe v sestavení Hello.exe a poklikání na ikonu Manifest v okně IL Disassembler vytvoří následující výstup:
// 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
Následující tabulka popisuje jednotlivé direktivy v manifestu sestavení Hello.exe sestavení použitého v příkladu:
Direktiva | Popis |
---|---|
.assembly extern <assembly name> | Určuje jiné sestavení, které obsahuje položky odkazované aktuálním modulem (v tomto příkladu mscorlib ). |
Token .publickeytoken <> | Určuje token skutečného klíče odkazovaného sestavení. |
Číslo verze .ver <> | Určuje číslo verze odkazovaného sestavení. |
Název sestavení sestavení .assembly <> | Určuje název sestavení. |
Hodnota .hash algoritmu <int32> | Určuje použitý algoritmus hash. |
Číslo verze .ver <> | Určuje číslo verze sestavení. |
Název souboru .module <> | Určuje název modulů, které tvoří sestavení. V tomto příkladu se sestavení skládá pouze z jednoho souboru. |
Hodnota subsystému .subsystem <> | Určuje prostředí aplikace požadované pro program. V tomto příkladu hodnota 3 označuje, že tento spustitelný soubor je spuštěn z konzoly. |
.corflags | V současné době je v metadatech vyhrazené pole. |
Manifest sestavení může obsahovat řadu různých direktiv v závislosti na obsahu sestavení. Rozsáhlý seznam direktiv v manifestu sestavení najdete v dokumentaci Ecma, zejména oddíl II: Definice metadat a sémantika a Oddíl III: Instrukční sada CIL:
- STANDARDY ECMA C# a common language infrastructure
- Standard ECMA-335 – Common Language Infrastructure (CLI)