Reflector : un décompilateur .Net

Reflector : un décompilateur .Net

Introduction

Beaucoup de développeur .net ne connaissent pas Reflector voici un rapide guide d'utilisation de cet outil.

Présentation de Reflector

Reflector est un programme gratuit permettant de décompiler des exécutable ou dll .Net : des assemblies. Vous pouvez télécharger ce programme à cette adresse : http://www.red-gate.com/products/dotnet-development/reflector/

Si vous ne connaissez pas le principe des « assemblies », voici quelques point clés en bref:

  • Une assembly peut être un fichier .exe ou .dll, c'est le résultat d'une compilation d'un code .Net ;
  • Une assembly est constitué d'une partie descriptive, et d'une partie code en MSIL (Microsoft Intermediate Language) ;
  • Le code MSIL est « human readable », c'est un mélange entre l'assembleur et .Net .

Premier lancement

Lors du premier lancement, Reflector vous demande quelle version du Framework vous voulez analyser, vous obtenez ensuite cette fenêtre :

Par défaut, on voit que plusieurs assembly sont chargées. Si l'on clique sur l'une d'elles on voit dans la partie basse de la fenêtre différentes informations sur l'assembly tel que sa location, sa version etc...

Si l'on développe l'assembly System.Web, on peut voir 2 noeuds, on va tout d'abord voir l'utilité du noeud Resources puis on verra ensuite le second noeud.

Le noeud Resources

Ce noeud contient toutes les ressources contenues dans l'assembly, une ressource est un fichier stocké dans l'assembly, cela peut être des images, des fichiers de traductions, ... dans le cas de l'assembly System.Web on voit les fichiers JavaScript servant aux différents contrôles ainsi que les images servant pour le designer des contrôles dans Visual Studio.

Pour voir le contenu des ressources il faut faire un clic droit sur la ressource puis View Resource.

Le noeud .dll ou .exe

Passons maintenant au premier noeud de tout à l'heure à savoir le noeud System.Web.dll

Ce noeud contient les différents namespace de l'assembly, développons le namespace System.Web.UI

On voit alors les différents types du namespace sélectionné, chaque sorte de type possède sa propre icône dont voici la signification :

Première décompilation

Commençons maintenant notre première décompilation. Pour cela nous allons nous intéresser au type System.Web.UI.WebControls.Label, développons alors ce type, les 2 premiers noeuds nous indique de quelle type dérive l'objet, et quel type dérive de lui :

On a aussi accès aux différentes méthodes, pour afficher le code de celle-ci il faut cliquer avec le bouton droit puis choisir « disassembler »

On a alors directement accès au code de la dll, ce code a été généré à partir du code MSIL, ce n'est pas le code qui a servi à compiler l'assembly, dans certains cas il se peut que le code ne soit pas parfait et comporte des erreurs. Pour naviguer dans le code, vous pouvez tout simplement cliquer sur les différents types et Reflector vous conduira à l'endroit souhaité. Vous pouvez afficher le code dans différents langages, tel que MSIL, VB, C#, Delphi, ...

Enfin dernière fonctionnalité intéressante, il s'agit de la fonction « Analyzer » (disponible en cliquant avec le bouton droit sur la méthode). Cette fonctionnalité permet de connaitre qui appelle la méthode ou le type et vice-versa cette fonctionnalité est très pratique lors du debug ou de l'analyse de code !

Pour désassembler une autre assembly, on peut tout simplement faire un drag & drop du fichier .dll ou .exe dans Reflector ou encore utiliser le menu « File > Open ».

Conclusion

Reflector est un outil indispensable à toutes les personnes souhaitant comprendre le fonctionnement interne du Framework .net. Il permet aussi de résoudre très rapidement de nombreux problèmes, lorsque la documentation n'est pas assez complète. Cet outil est gratuit et remis à jour régulièrement de plus il existe de nombreux plug-ins permettant d'aller encore plus loin dans l'analyse d'une assembly.

Ressources

Téléchargement de Reflector : http://www.red-gate.com/products/dotnet-development/reflector/
Signification des icones : http://msdn.microsoft.com/en-us/library/y47ychfe(VS.80).aspx
Add-ins pour Reflector : http://reflectoraddins.codeplex.com/

A voir également
Ce document intitulé « Reflector : un décompilateur .Net » issu de CodeS SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Rejoignez-nous