Beaucoup de développeur .net ne connaissent pas Reflector voici un rapide guide d'utilisation de cet outil.
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:
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.
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.
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 :
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 ».
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.
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/