MSIL Disassembler (Ildasm.exe)
Mise à jour : novembre 2007
Le Désassembleur MSIL est un outil associé à l'Assembleur MSIL (Ilasm.exe). Ildasm.exe crée, à partir d'un fichier exécutable portable comportant du code MSIL (Microsoft Intermediate Language), un fichier texte pouvant servir d'entrée dans Ilasm.exe.
ildasm [options] [PEfilename] [options]
Paramètres
Les options suivantes sont disponibles pour les fichiers .exe, .dll, .obj et .lib.
Option |
Description |
---|---|
/output=filename |
Crée un fichier de sortie avec le nom de fichierspécifié, au lieu d'afficher les résultats dans une interface utilisateur graphique. |
/rtf |
Produit la sortie au format RTF. Non valide avec l'option /text. Nouveau dans la version 2.0 du .NET Framework |
/text |
Affiche les résultats dans la fenêtre de console, plutôt que dans une interface utilisateur graphique ou dans un fichier de sortie. |
/html |
Produit la sortie au format HTML. Valide avec l'option /output uniquement. Nouveau dans la version 2.0 du .NET Framework |
/? |
Affiche la syntaxe de commande et les options de l'outil. |
Les options suivantes sont également disponibles pour les fichiers .exe et .dll.
Option |
Description |
---|---|
/bytes |
Affiche les octets actuels, au format hexadécimal, sous forme de commentaires d'instructions. |
/caverbal |
Produit des blobs d'attribut personnalisés sous forme verbale. La valeur par défaut est la forme binaire. Nouveau dans la version 2.0 du .NET Framework |
/linenum |
Inclut des références dans les lignes sources d'origine. |
/nobar |
Supprime la fenêtre indépendante de l'indicateur de progression du code machine. |
/noca |
Supprime la sortie d'attributs personnalisés. Nouveau dans la version 2.0 du .NET Framework |
/pubonly |
Désassemble uniquement les membres et les types publics. Équivaut à /visibility:PUB. |
/quoteallnames |
Entoure tous les noms de guillemets simples. |
/raweh |
Affiche les clauses de gestion des exceptions sous une forme brute. |
/source |
Affiche les lignes sources d'origine sous forme de commentaires. |
/tokens |
Affiche les jetons de métadonnées des classes et des membres. |
/visibility:vis [+vis ...] |
Désassemble uniquement les types ou les membres avec la visibilité spécifiée. Les valeurs valides pour vis sont les suivantes : PUB — Public PRI — Privé FAM — Famille ASM — Assembly FAA — Famille et Assembly FOA — Famille ou Assembly PSC — Portée privée Pour obtenir des définitions de ces modificateurs de visibilité, consultez MethodAttributes et TypeAttributes. |
Les options suivantes sont valides pour les fichiers .exe et .dll uniquement à des fins de sortie vers une console ou un fichier.
Option |
Description |
||
---|---|---|---|
/all |
Spécifie une combinaison d'options /header, /bytes, /stats, /classlist et /tokens.
|
||
/classlist |
Inclut une liste de classes définie dans le module. Nouveau dans la version 2.0 du .NET Framework |
||
/forward |
Utilise la déclaration de classe anticipée. Nouveau dans la version 2.0 du .NET Framework |
||
/header |
Inclut les informations d'en-tête du fichier dans la sortie. |
||
/item:class[::member[(sig]] |
Désassemble les éléments suivants en fonction de l'argument fourni :
|
||
/noil |
Supprime la sortie du code assembleur MSIL. |
||
/stats |
Inclut des statistiques sur l'image. Nouveau dans la version 2.0 du .NET Framework |
||
/typelist |
Produit la liste complète de types afin de conserver le tri des types en une boucle. Nouveau dans la version 2.0 du .NET Framework |
||
/unicode |
Utilise le codage Unicode pour la sortie. |
||
/utf8 |
Utilise le codage UTF-8 pour la sortie. ANSI correspond au codage par défaut. |
Les options suivantes sont valides pour les fichiers .exe, .dll, .obj et .lib uniquement à des fins de sortie vers une console ou un fichier.
Option |
Description |
---|---|
/metadata[=specifier] |
Affiche les métadonnées, où specifier est : MDHEADER — Affiche les informations d'en-tête et de taille des métadonnées. HEX — Affiche les informations en hexadécimales ainsi qu'en mots. CSV — Affiche le nombre d'enregistrements et les tailles de tas. UNREX — Affiche les externes non résolus. SCHEMA — Affiche l'en-tête des métadonnées et les information de schéma. RAW — Affiche les tables de métadonnées brutes. HEAPS — Affiche les tas bruts. VALIDATE — Valide la cohérence des métadonnées. Vous pouvez spécifier plusieurs fois /metadata, avec des valeurs différentes pour specifier. Nouveau dans la version 2.0 du .NET Framework |
Les options suivantes sont valides pour les fichiers .lib uniquement à des fins de sortie vers une console ou un fichier.
Option |
Description |
---|---|
/objectfile=filename |
Affiche les métadonnées d'un fichier objet seul dans la bibliothèque spécifiée. Nouveau dans la version 2.0 du .NET Framework |
Remarque : |
---|
Toutes les options d'Ildasm.exe ne font pas l'objet d'une distinction minuscules/majuscules et se reconnaissent à leurs trois premières lettres. Par exemple, /quo est équivalent à /quoteallnames. 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:filename équivaut à /output=filename. |
Notes
Ildasm.exe ne fonctionne qu'avec des fichiers exécutables portables stockés sur le disque. Il ne fonctionne pas avec des fichiers installés dans le Global Assembly Cache.
Le fichier texte généré par Ildasm.exe peut servir d'entrée dans l'Assembleur MSIL (Ilasm.exe). 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 sa 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 l'Assembleur MSIL pour générer un fichier exécutable final.
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++). |
Vous pouvez utiliser l'interface graphique utilisateur par défaut du Désassembleur MSIL pour afficher sous forme d'arborescence le code désassemblé et les métadonnées de tout fichier exécutable portable existant. Pour utiliser l'interface graphique utilisateur, tapez ildasm au niveau de la ligne de commande sans préciser l'argument PEfilename ni d'options. À partir du menu Fichier, vous pouvez naviguer jusqu'au fichier exécutable portable à charger dans Ildasm.exe. Pour enregistrer les métadonnées et le code désassemblé correspondant au fichier exécutable portable sélectionné, sélectionnez la commande Dump dans le menu Fichier. Pour enregistrer uniquement l'affichage sous forme d'arborescence, sélectionnez la commande Dump de l'arborescence dans le menu Fichier. Pour plus d'informations sur le chargement d'un fichier dans Ildasm.exe et sur l'interprétation de la sortie, consultez le didacticiel Ildasm.exe Tutorial, qui se trouve dans le dossier Samples fourni avec le Kit de développement logiciel (SDK) Windows.
Si vous utilisez Ildasm.exe avec un argument PEfilename comportant des ressources incorporées, l'outil génère alors plusieurs fichiers de sortie : un fichier texte comprenant du code MSIL et, pour chaque ressource managée incorporée, un fichier .res généré à l'aide du nom de la ressource issu des métadonnées. Si une ressource non managée est incorporée dans PEfilename, un fichier .res est alors généré à l'aide du nom de fichier spécifié pour la sortie MSIL par l'option /output*.*
Remarque : |
---|
Ildasm.exe affiche uniquement les descriptions des métadonnées des fichiers d'entrée .obj et .lib. Le code MSIL de ces types de fichiers n'est pas désassemblé. |
Vous pouvez exécuter Ildasm.exe sur un fichier exe ou .dll pour déterminer s'il s'agit d'un fichier managé. Si le fichier n'est pas managé, l'outil affiche un message indiquant que le fichier ne contient pas d'en-tête du Common Language Runtime valide et qu'il ne peut pas être désassemblé. S'il s'agit d'un fichier managé, l'outil s'exécute correctement.
Exemples
La commande suivante affiche les métadonnées et le code désassemblé du fichier exécutable portable MyHello.exe dans l'interface graphique utilisateur par défaut d'Ildasm.exe.
ildasm myHello.exe
La commande suivante désassemble le fichier MyFile.exe et enregistre le texte de l'Assembleur MSIL obtenu dans le fichier MyFile.il.
ildasm MyFile.exe /output:MyFile.il
La commande suivante désassemble le fichier MyFile.exe et affiche le texte de l'Assembleur MSIL obtenu dans la fenêtre de console.
ildasm MyFile.exe /text
Si le fichier MyApp.exe contient des ressources managées et non managées incorporées, la commande suivante génère quatre fichiers : MyApp.il, MyApp.res, Icons.resources, et Message.resources :
ildasm MyApp.exe /output:MyApp.il
La commande suivante désassemble la méthode MyMethod figurant dans la classe MyClass de MyFile.exe et affiche la sortie dans la fenêtre de console.
ildasm /item:MyClass::MyMethod MyFile.exe /text
L'exemple précédent peut comporter plusieurs méthodes MyMethod avec différentes signatures. La commande suivante désassemble la méthode d'instance MyMethod avec le type de retour de void et les types de paramètres int32 et string.
ildasm /item:"MyClass::MyMethod(instance void(int32,string)" MyFile.exe /text
Remarque : |
---|
Dans les versions 1.0 et 1.1 du .NET Framework, la parenthèse ouvrante qui suit le nom de la méthode doit être accompagnée d'une parenthèse fermante après la signature : MyMethod(instance void(int32)). Dans la version 2.0 du .NET Framework, la parenthèse fermante doit être supprimée : MyMethod(instance void(int32). |
Pour récupérer une méthode static (méthode Shared dans Visual Basic), supprimez le mot clé instance. Les types de classes qui ne sont pas des types primitifs comme int32 et string doivent inclure l'espace de noms et être précédés du mot clé class. Les types externes doivent être précédés du nom de la bibliothèque entre crochets. La commande suivante désassemble une méthode statique nommée MyMethod qui comprend un paramètre de type AppDomain et un type de retour AppDomain.
ildasm /item:"MyClass::MyMethod(class [mscorlib]System.AppDomain(class [mscorlib]System.AppDomain)" MyFile.exe /text
Un type imbriqué doit être précédé de la classe le contenant, délimitée par une barre oblique. Par exemple, si la classe MyNamespace.MyClass contient une classe imbriquée nommée NestedClass, la classe imbriquée est identifiée comme suit : class MyNamespace.MyClass/NestedClass.