Comment : Afficher le contenu d’un assembly

Vous pouvez utiliser Ildasm.exe (le Désassembleur IL) pour visualiser les informations du langage CIL (Common Intermediate Language) dans un fichier. Si le fichier examiné est un assembly, ces informations peuvent inclure les attributs de l’assembly et des références à d’autres modules et assemblys. Ces informations peuvent être utiles pour déterminer si un fichier est un assembly ou fait partie d’un assembly et s’il a des références à d’autres modules ou assemblys.

Pour afficher le contenu d’un assembly à l’aide de Ildasm.exe, saisissez ildasm <pour le nom de l’assembly> à l’invite de commandes. Par exemple, la commande suivante désassemble l’assembly Hello.exe.

ildasm Hello.exe

Pour voir les informations du manifeste de l’assembly, double-cliquez sur l’icône Manifeste dans la fenêtre du désassembleur IL.

Exemple

L’exemple suivant débute avec un programme de base « Hello World ». Après avoir compilé le programme, utilisez Ildasm.exe pour désassembler l’assembly Hello.exe et consulter le manifeste d’assembly.

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

L’exécution de la commande ildasm.exe sur l’assembly Hello.exe et le fait de double-cliquer sur l’icône Manifeste dans la fenêtre du désassembleur IL produisent la sortie suivante :

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

Le tableau suivant décrit chaque directive du manifeste d’assembly de l’assembly Hello.exe utilisé dans l’exemple.

Directive Description
.assembly extern <nom_assembly> Spécifie un autre assembly qui contient des éléments référencés par le module actuel (dans cet exemple, mscorlib).
.publickeytoken <jeton> Spécifie le jeton de la clé réelle de l’assembly référencé.
.ver <numéro_version> Spécifie le numéro de version de l’assembly référencé.
.assembly <nom_assembly> Spécifie le nom de l’assembly.
.hash algorithm <valeur_int32> Spécifie l’algorithme de hachage utilisé.
.ver <numéro_version> Spécifie le numéro de version de l’assembly.
.module <nom_fichier> Spécifie le nom des modules qui composent l’assembly. Dans cet exemple, l’assembly se compose d’un seul fichier.
.subsystem <valeur> Spécifie l’environnement d’application nécessaire pour le programme. Dans cet exemple, la valeur 3 indique que cet exécutable est exécuté à partir d’une console.
.corflags Actuellement un champ réservé dans les métadonnées.

Un manifeste d’assembly peut contenir plusieurs directives différentes, en fonction du contenu de l’assembly. Pour obtenir une liste complète des directives dans le manifeste d’assembly, consultez la documentation Ecma, en particulier « Partition II: Metadata Definition and Semantics » et « Partition III: CIL Instruction Set » :

Voir aussi