Assembleur MSIL (Ilasm.exe)
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. Notes 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. Notes 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. |
Notes
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.
Notes
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.
Notes
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.
Notes
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 .NET Framework SDK.
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
Référence
Outils du .NET Framework
MSIL Disassembler (Ildasm.exe)
Invite de commandes du Kit de développement SDK