Ilasm.exe (Assembleur MSIL)

L'Assembleur MSIL génère un fichier PE (Portable Executable) en langage MSIL (Microsoft Intermediate Language). (Pour plus d'informations sur le langage MSIL, consultez Processus d'exécution managée.) Vous pouvez exécuter le fichier exécutable obtenu, qui comporte le langage MSIL et les métadonnées nécessaires, pour déterminer si le langage MSIL fonctionne comme prévu.

Cet outil est installé automatiquement avec Visual Studio et avec le Kit de développement logiciel Windows. Pour exécuter l'outil, nous vous recommandons d'utiliser l'invite de commandes Visual Studio ou l'invite de commandes du Kit de développement logiciel (l'interpréteur de commandes CMD). Ces utilitaires vous permettent d'exécuter l'outil facilement, sans naviguer jusqu'au dossier d'installation. Pour plus d'informations, consultez Invites de commandes Visual Studio e t Kit de développement logiciel (SDK) Windows.

  • Si Visual Studio est installé sur votre ordinateur : dans la barre des tâches, cliquez sur le bouton Start, All Programs, Visual Studio, sur Visual Studio Tools, puis sur Visual Studio Command Prompt.

    ou

    Si vous avez le Kit de développement logiciel Windows installé sur votre ordinateur : Dans la barre des tâches, cliquez sur Start, All Programs, le dossier correspondant au Kit de développement logiciel, puis sur Command Prompt (ou CMD Shell).

  • À l'invite de commandes, tapez ce qui suit :

ilasm [options] filename [[options]filename...]

Paramètres

Argument

Description

filename

Nom du fichier source .il. Ce fichier est composé de directives de déclaration de métadonnées et d'instructions MSIL symboliques. Plusieurs arguments du fichier source peuvent être fournis pour générer un seul fichier exécutable portable avec Ilasm.exe.

RemarqueRemarque
Vérifiez que la dernière ligne de code du fichier source .il comporte un espace blanc de fin ou un caractère de fin de ligne.

Option

Description

/alignment=integer

Assigne à FileAlignment la valeur spécifiée par integer dans l'en-tête Optional NT. Lorsque la directive IL .alignment est spécifiée dans le fichier, cette option se substitue à elle.

/base=integer

Assigne à ImageBase la valeur spécifiée par integer dans l'en-tête Optional NT. Lorsque la directive IL .imagebase est spécifiée dans le fichier, cette option se substitue à elle.

/clock

Calcule et indique la durée des compilations suivantes, en millisecondes, pour le fichier source .il :

Total Run : Durée totale de l'exécution de toutes les opérations spécifiques qui suivent.

Startup : Chargement et ouverture du fichier.

Emitting MD : Émission de métadonnées.

Ref to Def Resolution : Résolution des références aux définitions dans le fichier.

CEE File Generation : Génération de l'image du fichier en mémoire.

PE File Writing : Écriture de l'image dans un fichier PE.

/debug[=IMPL|OPT]

Inclut des informations de débogage (noms des variables locales et des arguments et numéros de ligne). Crée un fichier PDB.

/debug sans valeur supplémentaire désactive l'optimisation JIT et utilise des points de séquence du fichier PDB.

IMPL désactive l'optimisation JIT et utilise des points de séquence implicites.

OPT active l'optimisation JIT et utilise des points de séquence implicites.

IMPL et OPT sont des nouveautés de la version 2.0 du .NET Framework.

/dll

Génère un fichier .dll en tant que sortie.

/enc=file

Crée des deltas Modifier && Continuer à partir du fichier source spécifié.

Cet argument est utilisé uniquement à titre d'information et n'est pas pris en charge pour une utilisation commerciale.

Nouveau dans la version 2.0 du .NET Framework

/exe

Génère un fichier exécutable en tant que sortie. Il s'agit de la valeur par défaut.

/flags=integer

Assigne à ImageFlags la valeur spécifiée par integer dans l'en-tête du Common Language Runtime. Lorsque la directive IL .corflags est spécifiée dans le fichier, cette option se substitue à elle. Consultez CorHdr.h , COMIMAGE_FLAGS pour obtenir la liste des valeurs valides pour integer.

/fold

Insère des corps de méthode identiques en un seul.

Nouveau dans la version 2.0 du .NET Framework

/include=includePath

Définit un chemin d'accès pour rechercher des fichiers fournis avec #include.

Nouveau dans la version 2.0 du .NET Framework

/itanium

Spécifie Intel Itanium comme processeur cible.

Si aucune largeur de bits d'image n'est spécifiée, la valeur par défaut est /pe64.

Nouveau dans la version 2.0 du .NET Framework

/key:keyFile

Compile filename avec une signature forte à l'aide de la clé privée figurant dans keyFile.

/key:@keySource

Compile filename avec une signature forte à l'aide de la clé privée générée au niveau de keySource.

/listing

Génère un fichier listing lors de la sortie standard. Si vous omettez cette option, aucun fichier listing n'est alors généré.

Ce paramètre n'est pas pris en charge dans les versions 2.0 et ultérieures du .NET Framework.

/mdv=versionString

Définit la chaîne de version de métadonnées.

Nouveau dans la version 2.0 du .NET Framework

/msv=major.minor

Définit la version de flux de métadonnées, dans laquelle major et minor sont des entiers.

Nouveau dans la version 2.0 du .NET Framework

/noautoinherit

Désactive l'héritage par défaut de Object lorsque aucune classe de base n'est spécifiée.

Nouveau dans la version 2.0 du .NET Framework

/nocorstub

Supprime la génération du stub CORExeMain.

Nouveau dans la version 2.0 du .NET Framework

/nologo

Supprime l'affichage de la bannière de démarrage Microsoft.

/output:file.ext

Spécifie le nom du fichier de sortie et son extension. Le nom du fichier de sortie est, par défaut, le même que le nom du premier fichier source. L'extension par défaut est .exe. Si vous spécifiez l'option /dll, l'extension par défaut est .dll.

RemarqueRemarque
La spécification de /output:myfile.dll ne définit pas l'option /dll.Si vous ne spécifiez pas l'option /dll, il en résultera un fichier exécutable nommé myfile.dll.

/optimize

Optimise les instructions allongées en instructions abrégées. Par exemple, br en br.s.

Nouveau dans la version 2.0 du .NET Framework

/pe64

Crée une image 64 bits (PE32+).

Si aucun processeur cible n'est spécifié, la valeur par défaut est /itanium.

Nouveau dans la version 2.0 du .NET Framework

/pdb

Crée un fichier PDB sans activer le suivi des informations de débogage.

Nouveau dans la version 2.0 du .NET Framework

/quiet

Spécifie le mode silencieux ; ne fait pas état de la progression de l'assembly.

/resource:file.res

Inclut le fichier de ressources spécifié au format *.res au fichier .exe ou .dll obtenu. Un seul fichier .res peut être spécifié avec l'option /resource.

/stack=stackSize

Affecte stackSize à la valeur SizeOfStackReserve dans l'en-tête Optional NT.

Nouveau dans la version 2.0 du .NET Framework

/stripreloc

Spécifie qu'aucun réadressage de base n'est requis.

Nouveau dans la version 2.0 du .NET Framework

/subsystem=integer

Assigne à subsystem la valeur spécifiée par integer dans l'en-tête Optional NT. Lorsque la directive IL .subsystem est spécifiée dans le fichier, cette option se substitue à elle. Consultez winnt.h, IMAGE_SUBSYSTEM pour obtenir la liste des valeurs valides pour integer.

/x64

Spécifie un processeur AMD 64 bits comme processeur cible.

Si aucune largeur de bits d'image n'est spécifiée, la valeur par défaut est /pe64.

Nouveau dans la version 2.0 du .NET Framework

/?

Affiche la syntaxe et les options de commande de l'outil.

RemarqueRemarque

Toutes les options d'Ilasm.exe ne font pas l'objet d'une distinction minuscules/majuscules et se reconnaissent à leurs trois premières lettres.Par exemple, /lis est équivalent à /listing et /res:myresfile.res est équivalent à /resource:myresfile.res.Les options spécifiant des arguments prennent en charge les deux-points (:) ou le signe égal (=) en tant que séparateur entre l'option et l'argument.Par exemple, /output:file.ext équivaut à /output=file.ext.

Notes

L'Assembleur MSIL permet aux fournisseurs d'outils de concevoir et d'implémenter des générateurs MSIL. Grâce à Ilasm.exe, les développeurs d'outils et de compilateurs peuvent se concentrer sur le langage MSIL et la génération de métadonnées sans se préoccuper de l'émission du langage MSIL au format de fichier exécutable portable.

Comparable à d'autres compilateurs ayant pour cible le runtime, tels que C# et Visual Basic, Ilasm.exe ne génère pas de fichiers objets intermédiaires et ne requiert pas d'étape de liaison pour constituer un fichier exécutable portable.

L'Assembleur MSIL peut exprimer toutes les fonctionnalités métadonnées et MSIL existantes des langages de programmation ayant pour cible le runtime. Du code managé écrit dans l'un de ces langages de programmation peut ainsi être correctement exprimé dans l'Assembleur MSIL et compilé avec Ilasm.exe.

RemarqueRemarque

La compilation peut échouer si la dernière ligne de code du fichier source .il ne comporte pas d'espace blanc de fin ou de caractère de fin de ligne.

Vous pouvez utiliser Ilasm.exe avec l'outil qui lui est associé, Ildasm.exe. Ildasm.exe utilise un fichier PE qui contient le code MSIL et crée un fichier texte qu'il peut utiliser en entrée. Cet outil s'avère, par exemple, utile lors de la compilation d'un code dans un langage de programmation ne prenant pas en charge tous les attributs de métadonnées du runtime. Une fois le code compilé et la sortie exécutée via Ildasm.exe, le fichier texte MSIL obtenu peut être modifié manuellement pour y ajouter les attributs manquants. Vous pouvez ensuite exécuter ce fichier texte via Ilasm.exe pour générer un fichier exécutable final.

Vous pouvez également utiliser cette technique pour générer un seul fichier exécutable portable à partir de plusieurs fichiers exécutables portables provenant de différents compilateurs.

RemarqueRemarque

Actuellement, vous ne pouvez pas utiliser cette technique avec des fichiers exécutables portables qui contiennent du code natif incorporé (par exemple, des fichiers exécutables portables générés par Visual C++).

Pour que cette exploitation conjointe d'Ildasm.exe et d'Ilasm.exe soit la plus exacte possible, l'assembleur n'effectue pas certaines optimisations simples et ignore, de ce fait, s'il doit utiliser des formes abrégées ou allongées d'instructions. Par exemple, l'outil n'essaie pas de déterminer s'il peut remplacer un encodage abrégé par un codage allongé que vous avez pu écrire dans vos sources MSIL (ou qu'un autre compilateur a pu émettre). Si vous souhaitez un encodage abrégé, vous devez l'écrire de manière explicite sous cette forme. Toutefois, l'assembleur ne recherche pas, le cas échéant, d'éventuelles conditions non valides.

RemarqueRemarque

Ildasm.exe ne fonctionne qu'avec des fichiers stockés sur le disque.Il ne fonctionne pas avec des fichiers installés dans le Global Assembly Cache.

Pour plus d'informations sur la grammaire de MSIL, consultez le fichier asmparse.grammar dans le Kit de développement logiciel (SDK) Windows.

Exemples

La commande suivante assemble le fichier MSIL myTestFile.il et génère le fichier exécutable myTestFile.exe..

ilasm myTestFile

La commande suivante assemble le fichier MSIL myTestFile.il et génère le fichier .dll myTestFile.dll.

ilasm myTestFile /dll 

La commande suivante assemble le fichier MSIL myTestFile.il et génère le fichier .dll myNewTestFile.dll.

ilasm myTestFile /dll /output:myNewTestFile.dll

L'exemple de code suivant illustre une application extrêmement simple qui affiche "Hello World!" à la console. Vous pouvez compiler ce code, puis utiliser l'outil Ildasm.exe pour générer un fichier MSIL.

using System;
public class Hello
{
    public static void Main(String[] args)
    {
        Console.WriteLine("Hello World!");
    }
}

L'exemple de code MSIL suivant correspond à l'exemple de code C# précédent. Vous pouvez compiler ce code dans un assembly à l'aide de l'outil Ilasm.exe (Assembleur MSIL). Le MSIL et les exemples de code C# affichent "Hello World!" à la console.

// Metadata version: v2.0.50215
.assembly extern mscorlib
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 2:0:0:0
}
.assembly sample
{
  .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 ) 
  .hash algorithm 0x00008004
  .ver 0:0:0:0
}
.module sample.exe
// MVID: {A224F460-A049-4A03-9E71-80A36DBBBCD3}
.imagebase 0x00400000
.file alignment 0x00000200
.stackreserve 0x00100000
.subsystem 0x0003       // WINDOWS_CUI
.corflags 0x00000001    //  ILONLY
// Image base: 0x02F20000


// =============== CLASS MEMBERS DECLARATION ===================

.class public auto ansi beforefieldinit Hello
       extends [mscorlib]System.Object
{
  .method public hidebysig static void  Main(string[] args) cil managed
  {
    .entrypoint
    // Code size       13 (0xd)
    .maxstack  8
    IL_0000:  nop
    IL_0001:  ldstr      "Hello World!"
    IL_0006:  call       void [mscorlib]System.Console::WriteLine(string)
    IL_000b:  nop
    IL_000c:  ret
  } // end of method Hello::Main

  .method public hidebysig specialname rtspecialname 
          instance void  .ctor() cil managed
  {
    // Code size       7 (0x7)
    .maxstack  8
    IL_0000:  ldarg.0
    IL_0001:  call       instance void [mscorlib]System.Object::.ctor()
    IL_0006:  ret
  } // end of method Hello::.ctor

} // end of class Hello

Voir aussi

Référence

Ildasm.exe (Désassembleur MSIL)

Invites de commandes Visual Studio e t Kit de développement logiciel (SDK) Windows

Concepts

Processus d'exécution managée

Autres ressources

Outils du .NET Framework

Historique des modifications

Date

Historique

Motif

Avril 2011

Informations supplémentaires sur l'utilisation des invites de commandes de Visual Studio et du Kit de développement logiciel (SDK) Windows.

Améliorations apportées aux informations.