Assembleur MSIL (Ilasm.exe)

Mise à jour : novembre 2007

L'Assembleur MSIL génère un fichier PE (Portable Executable) en langage MSIL (Microsoft Intermediate Language). (Pour plus d'informations sur MSIL, consultez Compilation en MSIL.) 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.

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.

Remarque :

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 l'option 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.

Remarque :

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.

Remarque :

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 équivaut à /listing et /res:myresfile.res à /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.

Remarque :

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 crée, à partir d'un fichier exécutable portable comportant du code MSIL, un fichier texte pouvant servir d'entrée dans Ilasm.exe. Cet outil est utile, par exemple, lors de la compilation d'un code dans un langage de programmation qui ne prend 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.

Remarque :

Pour l'instant, 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 codage 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 codage 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.

Remarque :

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 Assembleur MSIL (Ilasm.exe). 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

Concepts

Compilation en MSIL

Référence

Outils du .NET Framework

MSIL Disassembler (Ildasm.exe)

Invite de commandes du Kit de développement SDK