reverse engineering c# and -...

of 118 /118
Groupe Sodifrance Université de Nantes Nantes Reverse engineering C# and .Net Mathieu ALBERT Stage de fin d’études Master professionnel ALMA 2006-2007 Maître de stage : M. BONNET Tuteur : M. SUNYÉ

Author: doantram

Post on 07-Mar-2018

230 views

Category:

Documents


6 download

Embed Size (px)

TRANSCRIPT

  • Groupe Sodifrance Universit de Nantes

    Nantes

    Reverse engineering C# and .Net

    Mathieu ALBERT

    Stage de fin dtudesMaster professionnel ALMA

    2006-2007

    Matre de stage : M. BONNETTuteur : M. SUNY

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    Table des matires

    Table des matires 1

    Introduction 3

    1 Organisation du Stage 4

    1.1 LEntreprise Sodifrance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

    1.2 Le Stage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

    2 Les outils et techniques utilises 11

    2.1 La grammaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

    2.2 La transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

    2.3 Prsentation des outils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

    3 Construction dune grammaire C# 18

    3.1 Un peu de cours . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

    3.2 La grammaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

    3.3 Le mta modle C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

    4 Rtro-ingnierie 25

    4.1 Un peu de cours . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

    4.2 Les outils existants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    4.3 La cration du modle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

    5 Migration C# - Java 32

    5.1 Un peu de cours . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

    5.2 La comparaison C# - Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

    5.3 Les rgles de transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

    Conclusion 39

    Bibliographie 40

    Index 43

    Table des figures 45

    TABLE DES MATIRES Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    1/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    ANNEXES 46

    A Abrviations 46

    B Glossaire 49

    C Fonctionnement du Common Language Infrastructure 50

    D Un exemple dutilisation de Reflector for .NET 52

    E tude du langage C# 54

    F Une comparaison C# vs Java 86

    G C# vs Java : Les mots cls 113

    H Un rsum des plateformes .NET & J2EE 114

    TABLE DES MATIRES Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    2/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    Introduction

    Du 2 avril 2007 au 14 septembre 2007, jai effectu un stage au sein de lentreprise Sodifrance(situe Nantes). Au cours de ce stage dans le dpartement R&D, jai pu mintresser ltude dulangage C# ainsi quaux mthodes de recherche et dveloppement.

    Plus largement, ce stage a t lopportunit pour moi dapprhender les difficults rencontreslors de projets professionnels. Ce stage a t aussi loccasion de comprendre le fonctionnement internedune socit informatique (ditrice de logiciel et SSII) avec toutes ses difficults.

    Au-del denrichir mes connaissances en informatique, ce stage ma permis de comprendredans quelle mesure la mise en place de mthodes et dorganisation est importante dans la russitedun projet, ainsi que le contact avec ses collgues, ses suprieurs hirarchiques et le cas chant lesclients.

    En mintressant de prs ltude dun langage (le langage C#) et son outil de cartographie,jai pu apprcier le travail des quipes de recherche et dveloppement. Cest dans cette direction quemon projet professionnel soriente.

    En vue de rendre compte de manire fidle et analytique des 5 mois passs au sein de lasocit Sodifrance, il apparait logique de prsenter titre pralable lenvironnement conomique dustage et le cadre du stage (chapitre 1, page 4). Les outils fournis par Sodifrance (chapitre 2, page11) mont permis de raliser les 3 tches de mon stage, savoir ltude du langage (chapitre 3, page18), lanalyse des fichiers sources (chapitre 4, page 25) et la migration vers la langage java (chapitre5, page 32).

    Remerciements :

    Je tiens remercier le Groupe Sodifrance et ses quipes pour mavoir accueilli pour ce stage.

    Je tiens remercier plus particulirement :

    M. Patrice BONNET, qui ma suivi et guid durant tout le stage. M. Jean-Michel PETIT, qui a su couter mes attentes en adaptant le sujet du stage. M. Gwenal POINTEAU, qui ma fait une place dans son bureau et qui ma aid maitriser

    lenvironnement Sodifrance.

    Je voudrais galement remercier M. Gerson SUNY, mon tuteur, pour ses conseils et sonaide.

    Introduction Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    3/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    1 Organisation du Stage

    1.1 LEntreprise Sodifrance

    1.1.1 Prsentation

    Depuis sa cration en 1986, Sodifrance accompagne les entreprises dans leurs projets dedveloppement et de modernisation de leurs systmes dinformation, depuis la prise en compte deleurs besoins jusqu la ralisation des projets et le transfert des comptences.

    Ses atouts en font un partenaire fort pour ses clients avec des offres technologiques reconnues,la capacit mener les plus grands projets, des comptences techniques importantes, et de nombreusesrfrences.

    Les offres et savoir-faire : Un positionnement unique combinant offres technologiques spcialises et services infor-

    matiques de proximit Une avance technologique reconnue sur des domaines cibls : Legacy Modernization, MDA,

    volution vers les Nouvelles Technologies Une exprience importante des grands projets capitalise dans une mthodologie prouve Une activit de Recherche et Dveloppement permanente et soutenue, garantissant lex-

    cellence des solutions proposes Des quipes de haut niveau, intervenant tout au long du cycle des projets La maitrise de technologies multiples, la double culture Main-Frame - Nouvelles Techno-

    logies

    Fig. 1.1 Rpartition du CA 2006 par mtier et par secteur dactivit.

    Le Stage Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    4/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    1.1.2 Carte didentit

    Date de cration 1986Structure juridique SA Directoire et Conseil de surveillance

    Chiffres daffaires 2006 45 Millions deuros (cf. figure 1.1)Prsident du directoire Franck MAZIN

    Activits Socit de Services et dIngnierie Informatiques, avec :- une expertise reconnue en Modernisation de patrimoines ap-plicatifs ( Legacy Modernization)- une filiale ddition de logiciels ddis loptimisation ducycle de vie des applications : Mia-Software

    Effectifs 570 collaborateurs au 31 dcembre 2006, prsents en Franceet en Belgique.835 collaborateurs au 1er aot 2007

    Cotations Eurolist dEuronext Paris compartiment CISIN : FR0000072563Reuters : SDIF.PABloomberg : SDIF FP

    Implantations En France (Ouest) : Rennes (sige social), Nantes, Brest, Bor-deaux, Niort, Le MansEn France (Est) : Paris, Orlans, ToulouseEn Belgique : Bruxelles (cf. figures 1.2)

    Assurance AG2R, AGF, AXA FRANCE, AXA BELGIUM, CIMUT, CNP-ASSURANCES, DEXIA INSURANCE, INDEPENDANT INSU-RANCE, MAAF, MACIF, MAIF, IMA, MMA, MNAM, MEDERIC,P&V ASSURANCES, SMABTP, REUNICA, ...

    Banque, Finance BANQUE POPULAIRE, BNP, CAISSE DES DPOTS, CRDITAGRICOLE, CRDIT INDUSTRIEL DE LOUEST, CRDIT MU-TUEL, CRDIT DU NORD, CRDIT LYONNAIS, FORTIS BANK,GE MONEY BANK, ING BELGIUM, SOCIT GNRALE, PORT-ZAMPARC, ...

    Industrie, D-fense, Services

    APEX, ARTIS, EADS, ERAM, CARRE BLANC, CONDAT, JANS-SEN CILAG, LECLERC, OUEST-FRANCE, MAISONS DU MONDE,SAGESS, SYSTME U, TERMINAUX DE NORMANDIE, SIEMENS,THALES, VALEO, YORK FRANCE, YVES ROCHER, ...

    Public, Para-public

    CELAR, COMMUNAUT URBAINE DE NANTES, ENSP, EQUANT,DCN, TAT DE GENVE, LA POSTE, SNCF, MINISTRE DE LAJUSTICE, MINISTRE DE LDUCATION NATIONALE, PARLE-MENT EUROPEN, MIPIH, TRANSPAC, ...

    Tab. 1.1 Clients du Groupe Sodifrance.

    Le Stage Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    5/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    Fig. 1.2 Rpartition des effectifs 2006 en France et en Belgique.

    1.1.3 Historique

    1986 Cration de Sodifrance par Francis Mazin. La socit se positionneinitialement sur des activits de montique et dinfogrance.

    1988 Sodifrance cre des activits dingnierie informatique.1992 Sodifrance cre des activits de migration des systmes dinforma-

    tion.1994-98 Sodifrance se dveloppe : acquisitions en France et au Luxembourg.

    Avril 1999 Sodifrance est introduite au second march de la bourse de Paris.Janvier 2000 La gestion de Sodifrance est modifie avec la mise en place dun

    Conseil de Surveillance et dun Directoire. Les activits du groupesont recentres sur les services informatiques, avec une expertise enmigration, et sur la montique.

    Dcembre 2001 Cession de TGD, la filiale de traitement du chque.Dcembre 2003 Cession de C2S, la filiale montaire.

    2006 Recrutement de 140 collaborateurs2007 Prvisions : Recrutement de 150 collaborateurs

    Avril 2007 Acquisition de la socit OneXt (spcialiste de la gestion de contenuopen source)

    Juillet 2007 Acquisition de la socit API Group (propose aux grands comptesdes prestations dingnierie et de Tierce Maintenance Applicativeet capitalise sur une double comptence Mainframe-Nouvelles Tech-nologies)

    Le Stage Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    6/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    Fig. 1.3 Schma synthtique des diffrents composants et leurs changes de donnes.

    1.2 Le Stage

    1.2.1 Le sujet

    Le stage est intitul : "Reverse engineering C# and dot.Net".

    Lobjectif est de proposer des briques de solutions de reverse engineering dapplicationscrites en .Net.

    Pour la socit Sodifrance, ce stage est intressant car il permet dalimenter leur logiciel decartographie. En effet, Essor est un produit de rtro documentation dapplications qui a pour fonctiondinventorier et de cartographier les composants et objets informatiques du systme dinformation.Cet inventaire se fait par une analyse statique rgulire de lensemble des sources dun site informa-tique. Le rsultat des analyses est consolid dans un rfrentiel. Le rfrentiel est ensuite accessiblepar un outil de consultation proposant notamment des fonctions graphiques (graphe dutilisationdune classe, graphe de dpendances ...).

    Plus concrtement, le stage cest deux tapes (comme on le voit sur la figure 1.3). La pre-mire est la cration dun analyseur de source C#, la seconde est une migration dune technologie une autre. On remarque sur cette mme figure, comment sintgre le projet dans lenvironnementSodifrance, et plus particulirement loutil ESSOR.

    1.2.2 Les diffrentes parties

    Le stage est dcoup en plusieurs parties. Avant de toucher au contenu du stage, il estncessaire de se familiariser avec les outils et les mthodologies utiliss par Sodifrance. Pour ledroulement du stage, comme indiquez prcdement, deux tapes sont ncessaires. La premire est la

    Le Stage Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    7/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    Fig. 1.4 Dcoupage du temps de travail.

    cration dun parseur. Celle ci est elle mme compose de sous tapes : La modlisation et la partiede rtro ingnierie. La seconde tape est la migration C# vers Java. Pour finir et complter ce stage,des ressources sont alloues pour la constitution dun rapport.

    Prise en main des outils

    La premire partie consistait la prise en main des outils. En effet, pour la ralisation de cestage, de nouveaux outils se sont prsents moi. Tout dabord, la programmation sest effectu enC++, il ma fallu maitriser Visual C++ [1]. Pour la construction du parser partir de la grammaire,jai utilis un logiciel propre Sodifrance T-gen. Ce dernier cre par Justin O. Graver [2] nest plussoutenu et t repris par Sodifrance qui la amlior afin de pouvoir lutiliser pour ses applications.Enfin, MIA Studio a t utilis pour gnrer le code et effectuer la transformation [3].

    Le Stage Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    8/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    Tches Estimation1 Rvaluation1

    Prise en main des outils 9 HJ 6 HJMta modlisation et grammaire C# 19 HJ 24 HJImplmentation des rgles 28 HJ 31 HJSolution de migration C# vers Java 28 HJ 20 HJRapport Soutenance 19 HJ 22 HJ

    Fig. 1.5 Dure tablie pour chacune des tches.

    Mta modlisation et grammaire C#

    La deuxime partie est ltude du langage C# avec la modlisation du langage et la crationde la grammaire du langage.

    Implmentation des rgles

    La troisime partie est limplmentation des rgles de la grammaire afin dalimenter le mo-dle. Le modle ainsi cre sera exporter au format xmi.

    Solution de migration C# vers Java

    La quatrime partie est une solution de migration du code source C# vers Java.

    Rapport Soutenance

    La dernire partie permet de raliser le rapport de stage ainsi que la prparation la soute-nance.

    1.2.3 Le planning

    Dans le but de suivre une organisation claire afin de mener bien lensemble des tchesprvues nous avons tabli des dures prvisionnelles pour chacune des parties.

    Aprs avoir spar les 5 tapes du stage, nous avons chiffr le temps ncessaire leur ralisa-tion. Pour cela, nous avons considr que l"Implmentation des rgles" et la "Solution de migration"avaient besoin dune dure importante : 6 semaines. La "Mta modlisation et grammaire" et lerapport seront effectus en 4 semaines et enfin, la prise en mains des outils en 2 semaines. Avec uneestimation de 4,5 jours par semaine, nous avons tabli lestimation de la figure 1.5.

    Pendant le droulement du stage, nous nous sommes aperu que lvaluation mritait dtrerevue. En effet, certaines parties (comme l"Implmentation des rgles") ncessitaient plus de temps,et dautres moins de temps. Nous avons donc ralis une rvaluation pour chacune des parties (figure1.5) en rajoutant des HJ dans certaines parties, et en enlevant dans dautres.

    1Le cot pour chaque tape du projet est dfini en HJ : Homme Jour (cf. dfinition ANNEXE A page 47.)

    Le Stage Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    9/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    Fig. 1.6 Rpartition des tches en jours par semaine.

    Pour lvolution des tches et pour permettre de rester dans les temps, jai mis en place unsuivi au jour le jour. Chaque temps pass sur une tche est alors comptabilis ( la demi journeprs). Dans la figure 1.6, on remarque semaine par semaine le dcoupage des tches.

    Le Stage Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    10/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    2 Les outils et techniques utilises

    Durant le stage, jai t amen manipuler des outils, pour la plupart propritaires dontSodifrance a lhabitude dutiliser. Mais toutes ces applications possdent des alternatifs.

    2.1 La grammaire

    Pour la grammaire nous avons utilis loutil T-gen utilis depuis plusieurs annes par Sodi-france et adapt aux besoins de leurs projets.

    2.1.1 Le choix dun gnrateur danalyseur

    Pour crer des compilateurs, il existe de nombreux outils : Lex et Yacc : Lex et yacc sont des outils de gnration danalyseurs lexicaux (Lex) et

    syntaxiques (Yacc) en langage C Flex et Bison : Flex et bison les implmentations GNU de Lex et yacc. T-gen : T-gen permet la gnration des parseurs LL et LR, qui seront automatiquement

    gnrs dans des arbres de drivation des arbres de syntaxe abstraites ou dobjets arbitraireSmalltalk.

    LRgen : LRgen est un systme de construction de parseurs, traducteurs, et compilateurspour les langages informatiques. Il est bas sur la nouvelle forme normale TBNF[4]. ilcontient : un gnrateur de lexer, un gnrateur de parseur, un constructeur pour la tabledes symboles, un constructeurs darbres syntaxiques abstraits. La sortie peut seffectueren C++ ou dans un autre langage.

    Dans le tableau suivant, on remarque chaque outil permet de crer lanalyseur lexical etsyntaxique. On remarque par ailleurs que le seul outil qui permet la gnration darbres abstraits estloutil Tgen

    Analyseur lexical Analyseur syntaxique Gnration darbres abstraitsANTLR X XBison XFlex XLex X

    LRgenT-gen X X XYacc X

    Le tableau ci dessous montre les diffrents choix possibles ainsi que quelques informations(alogrithmes, langages de sortie).

    Les outils Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    11/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    Algorithme Langage de Sortie PlateformeANTLR LL(k) C++, C#, Java et Python Toutes plateformes (java)Bison LALR, GLR C, C++ Unix, Linux, WinLRgen SLR, LALR, LR(1) C++1 WinT-gen LL, LALR Tous2 WinYacc LALR C, C++ Unix

    2.1.2 Le choix T-gen

    T-gen permet la gnration des parseurs LL et LR, qui seront automatiquement gnrsdans des arbres de drivation des arbres de syntaxe abstraites ou des objets arbitraire Smalltalk. Lasimple interface graphique amliore lapprentissage, la comprhension et lutilisation de T-gen. T-genest crit en Smalltalk.

    Sodifrance travaille depuis de nombreuses annes avec cet outil. Il a prouv son efficacit.De plus, il a t repris en interne afin de rpondre plus particulirement aux besoins de la socit.

    T-gen permet la gnration du parseur en classes smalltalk et en fichier xmi. Ce dernier estexploitable par nimporte quel outil de gnration auquel on applique nos propres rgles. Cest le casde loutil de Mia Software : Mia Gnration. Un module de gnration en C++ de Mia Gnrationa t cre par les quipes de recherches de Sodifrance.

    2.2 La transformation

    2.2.1 Le choix dun outil de transformation

    Pour la transformation, le nombre doutils est important. Le domaine est en plein dvelop-pement. Pour limiter la comparaison des outils, jai slectionner les plus courant, en respectant laparit libre et propritaire. Parmi ceux qui sont rfrencs dans le tableau suivant, on remarquequune majorit prend en compte le standard de lOMG QVT[5].

    Outil Socit Licence CommentairesATL LINA EPL Implmentation de QVT

    MDWorkbench Sodius Propritaire Utilisation dATLMIA Studio MIA Software Propritaire Utilisation possible de plusieurs

    langages pour la description desrgles :Java, MIATL, RL-TL

    ModFact Lip6 GPL LIP6 Implmentation de QVTOpenArchitecture openArchitecture EPL Le langage utilis est xTend

    Ware WareSmartQVT France Telecom EPL Implmentation de QVT

    R&DTogether 2006 Borland Propritaire Conforme aux standards QVT

    1Tous les langages peuvent tre gnrs, condition de crer le squelette correspondant.2Loutil T-gen gnre un fichier xmi. Ce fichier permet la gnration dans le langage dsir (C++, Java, ...)

    Les outils Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    12/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    2.2.2 Le choix de MIA Transformation

    Le logiciel

    MIA Transformation est un module de la suite MIA Studio. Cette dernire permet lauto-matisation des dveloppements logiciels grce lingnierie des modles MDA. Cette suite permetainsi de :

    Accrotre la productivit des dveloppements tout en augmentant la qualit ducode produit ;

    Baisser les cots de dveloppement des nouvelles applications ; Rduire les cots de maintenance des applications dveloppes.MIA Transformation est un outil qui ralise des transformations personnalises partir dun

    modle source (en xmi) vers un modle cible.

    Chaque rgle de transformation est compose de deux parties : une partie "requte" et unepartie action. Ces deux parties peuvent tre crites en trois langages diffrents : Java, RL-TL etMIA-TL.

    Ses points forts

    Le choix sest port sur le logiciel MIA Studio. Une raison de ce choix est la compatibilitavec les outils utiliss pour la cration du parseur MIA Gnration. Le second choix est lutilisa-tion habituelle de ce logiciel par les quipes de R&D. Les mthodes de dveloppement pour MIATransformation sont trs utilises et donc fiables.

    MIA DSL (Domain-Specific Language) permet dintgrer nimporte quel mta modle (crerpar vos soins) cet outil de transformation. Les mta modles peuvent tre dcrit partir de Rose,Poseidon, ...

    La dernire raison est le choix du langage de description des rgles. Java est un langage deprogrammation non spcifique la transformation qui permet de dcrire tout problme non li sp-cifiquement la transformation. Les deux autres langages sont dvelopps pour les transformations.La description des rgles de transformation est alors trs simple. La combinaison des deux types delangages fournit un outil complet pour la transformation.

    2.3 Prsentation des outils

    Aprs une petite tude des diffrents outils existant sur le march, jai choisi un outil pourchacune des tapes. Ces deux outils ont t choisi par les critres cits ci-dessus mais aussi par le faitque ces outils sont connus dans le service R&D de Sodifrance qui fournit une assistance importantede ces deux outils.

    2.3.1 T-gen

    Loutil T-gen est un gnrateur de traducteur "string-to-object". Il compos de plusieursparties, comme on le voit sur la figure 2.1. Les deux cadres de gauche sont plus intressants.

    Les outils Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    13/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    Fig. 2.1 TGEN : loutil.

    Les deux cadres de droite sont : la console qui affiche les messages lattention de lutilisateur. lexemple qui permet de vrifier que la grammaire accepte bien lexemple.

    Analyseur lexical

    Analyse lexicale : Elle lit les caractres dentre et produit comme rsultat une suitedunits lexicales que lanalyseur syntaxique aura traiter. En plus, lanalyseur lexical ralise cer-taines tches secondaires comme llimination de caractres superflus (commentaires, tabulations, finde lignes, ...).

    Analyseur syntaxique

    Analyse syntaxique : Lanalyseur syntaxique reoit une suite dunits lexicales de la partde lanalyseur lexical et doit vrifier que cette suite peut tre engendre par la grammaire du langage.

    Les outils Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    14/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    Fig. 2.2 MIA-Transformation : les rgles de transformation.

    2.3.2 MIA-Transformation

    Loutil MIA Transformation est utilis pour :1. Effectuer une transformation2. Visualiser les modles

    La transformation

    Dans la partie gauche de la fentre (figure 2.2), une arborescence prsente les diffrentesrgles. La rgle slectionne est dtaille dans la partie droite laide de 3 cadres : le contexte local,la requte et laction :Le contexte local permet de dfinir les variables manipules par la rgle courante (en lecture ou

    en criture) et/ou ses sous rgles (en lecture seulement), pour stocker des lments particuliersdu modle ou des donnes de type primitif (boolens, chanes, etc.) ou toute classe Java acces-sible. Elles sont soit alimentes par la requte, soit par laction, soit prives (non accessiblesaux sous rgles).

    Les outils Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    15/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    Fig. 2.3 MIA-Transformation : la lecture de modles.

    La requte est charge de chercher les ensembles dobjets du modle qui vrifient certaines condi-tions. Elle peut tre exprime dans 3 langages diffrents : Java, MIA-TL et RL-TL. Ces 2derniers sont des langages proches dun langage dinfrence utiliss pour des requtes simples.

    Laction dfinit le traitement appliquer sur les lments fournis par la requte. Elle est exprimedans un des 3 langages prcdents (pas obligatoirement le mme que pour la requte).

    Une rgle de transformation consiste crer de nouvelles instances et recopier les lmentsdune instance vers une autre. Les attributs et les associations dfinies dans le mtamodle sont tousconsidrs comme des liens par MIA-Transformation. Ainsi, pour spcifier la valeur dun attribut parexemple, on ajoute un lien entre lattribut et cette valeur.

    La transformation dun modle consiste excuter lensemble des rgles dfinies dans unscnario pour lequel on prcise le ou les modles dentre (et donc les mtamodles correspondants)et le ou les modles de sortie (ventuellement correspondant dautres mtamodles).

    Les outils Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    16/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    La lecture des modles

    Dans le but de lire les modles sources et cibles, MIA-Transformation affiche le modle defaon graphique.

    Ainsi dans la partie gauche (figure 2.3) est affich les modles chargs, les transformationsdu projet et optionnellement une trace de lexcution (pour faciliter la rsolution des problmes).Ici un modle en entre est slectionn et larborescence centrale prsente les diffrents lmentsdu mtamodle correspondant (ici avec une prsentation alphabtique) avec pour chacun le nombredinstances dans le modle.

    Les instances de llment en surimpression sont dtailles droite avec une hirarchie de sesliens. Les attributs de lobjet slectionn sont alors affichs en dessous. Les modles sont stocks soitdans un format XMI, soit directement dans le format dapplications de modlisation comme RationalRose par exemple.

    Lapplication donne galement accs la consultation de lensemble des mtamodles dispo-nibles laide dun browser.

    Les outils Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    17/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    3 Construction dune grammaire C#

    3.1 Un peu de cours

    3.1.1 Dfinitions

    La grammaire est ltude des rgles qui rgissent un langage.

    Grammaire

    Une grammaire est quadruplet G =< VN , VT , S, R >. Les diffrents composants de la gram-maire sont :

    VN : le vocabulaire non terminal ; VT : le vocabulaire terminal ; S : lensemble du vocabulaire non terminal en partie gauche, (S VN) ; R : lensemble des rgles. Une rgle est un couple quon note : , o VN VT = , VN et (VN VT )

    Vocabulaire terminal

    Le vocabulaire terminal est lensemble des littraux que lon trouve dans les sources C#. ontrouve alors :

    Les mots cls, qui sont des mots rservs avec un sens particulier (au nombre de 77) ; Les chiffres ; Les identifiants ; Les chaines de caractres (entoures par " ") ;

    Ltude de ce langage permet dtablir une grammaire. Mme si la spcification ECMAexiste, le travail de construction nest pas simple pour autant.

    3.1.2 Ltude du langage

    Le langage C# cr par Microsoft Rpermet de dvelopper des applications pour les systmesdexploitation Microsoft Windows Ret le Web en se basant sur larchitecture .NET.

    Ce langage a t conu dans le but dtre indpendant de la plate-forme et de lenvironnementdexcution. Normalement, le compilateur C# devrait pouvoir fonctionner partout o les types etfonctionnalits spcifis dans lECMA-334 [6] sont correctement prises en charge par lenvironnementdexcution.

    Actuellement, lenvironnement dexcution du langage commun (CLR : Common LanguageRuntime) de la technologie .NET est videmment, le domaine de prdilection du langage C#. Mais il

    La grammaire Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    18/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    existe dautres environnements en cours de dveloppement. Ils sont libres, on peut citer par exemplele projet mono [7].

    Le mcanisme de traitement du code source crit en C# par la plateforme Microsoft.NET,produit lors de la phase de compilation, un pseudo code dnomm MSIL (MicroSoft IntermediateLanguage), lequel sera interprt ensuite par la machine virtuelle (CLR) charg de la transformationen instructions excutable par la machine.

    Il a t conu afin de concurrencer Java dans la plateforme J2EE. Reprenant la syntaxegnrale et les concepts de Java, C# reste quand mme proche du C++. En effet, ce langage est unesavante combinaison des langages C, C++ et Java en expurgeant la plupart des sources derreurs eten amliorant certaines fonctionnalits.

    Comme pour java, la technologie .NET met galement la disposition du programmeurde nombreuses classes du .NET Framework, comprenant une plthore de mthodes et propritsexploitables dans des programmes C#.

    La gestion de la mmoire par lutilisation des pointeurs a t maintenue tout en veillant yintgrer un dispositif dappel explicite par lutilisation de mots-cls spcifiques.

    Le concept dhritage multiple dans la programmation oriente objet a t abandonn auprofit de lutilisation dinterfaces.

    Le langage C# permet une programmation oriente objet simple et moderne. Driv deslangages de programmation C et C++, C# semblera familier aux habitus du dveloppement en C,C++ et Java et ne sera sans aucun doute, pas plus difficile apprendre pour les autres.

    Effectivement, le langage C# ne comporte que 77 mots-cls. De plus, la programmation enC# se rvle intuitive, familire et moins verbeuse produisant du code se dmarquant par sa lisibilitet sa concision.

    Vous retrouvez dans lannexe E une prsentation dtaille du langage C#.

    3.2 La grammaire

    La grammaire C# est trs complexe. La mise en uvre dune grammaire LALR pour celangage demande beaucoup de temps et dnergie. La grammaire actuelle ne permet pas de reconnaitretoutes les possibilits du langage, il reste encore du travail de ce cot ci.

    3.2.1 La spcification ECMA

    LECMA est un organisme de normalisation international qui compte parmi ses membres lesplus grands organismes de production, de commercialisation et de dveloppement de systmes infor-matique. Parmi les membres, on peut citer : Microsoft, Intel, Canon, HP, Novell, Apple, et Borland.Citons aussi pour les membres NFP (not-for-profit) : GNOME Foundation, Mozilla Foundation, etlObject Management Group (la liste complte des membres : http://www.ecma-international.org/memento/members.htm).

    Ces principaux thmes de normalisation sont : Communications : CSTA (Computer Supported Telecommunication Applications), UWD

    La grammaire Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    19/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    (Ultra-wideband) Langages : C# et CLI ; Mdia : diques optiques et disques cartouches, Holographic Information Storage Systems

    (HISS) ; Environnement : Design for Environment (DfE) ; Scurit : "ECMA-287 - Hazard Based Safety Engineering for ICT & CE products" ; Format des donnes : Universal 3D (U3D), le format Office Open XML, XML Paper

    Specification ;LECMA a ratifi les spcifications du langage C# (prononcer C-Sharp) sous la rfrence

    ECMA 334 [6]. Cette ratification marque une tape importante dans la normalisation et lindpen-dance du langage C# vis vis des fournisseurs.

    Cette spcification permet dautres implmentations du langage C#. On peut citer Mono etDotGru. Il est ncessaire de prciser que Microsoft ne considre pas ces projets comme une menace.Aujourdhui, une quipe de 28 dveloppeurs (dont 6 permanents) travaillent sur le projet Mono, chezMicrosoft ils sont plusieurs centaines (source : [8]).

    Microsoft a demand la normalisation ECMA, qui est rendu la 4me dition (Juin 2006).La premire dition est sortie en dcembre 2001 suite la demande de normalisation de Microsoftpour le langage C# sorti en juin 2000.

    3.2.2 La grammaire

    Pour pouvoir arriver fournir une grammaire convenable, je suis tout dabord parti de lagrammaire officielle tablie par ECMA Internationale. Celle ci est ambige.

    Jai donc travaill la rendre non ambige.

    Le premier travail a t de simplifier la grammaire afin de prendre en compte les objetscomme les classes, les namespaces ou les mthodes. Puis petit petit, jai procd lajout successifdes concepts du langage.

    Le langage C# tire ses concepts des langages C/C++ et Java, la construction de morceauxest vidente et souvent habituelle.

    Prenons lexemple de dclaration dune classe.

    Soit le bout de code suivant :

    pub l i c c l a s s Kid{

    p r i va t e i n t age ;p r i va t e s t r i n g name ;

    // Defau l t con s t ruc to r :pub l i c Kid ( ){

    name = "N/A" ;}

    // Constructor :pub l i c Kid ( s t r i n g name , i n t age )

    La grammaire Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    20/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    {t h i s . name = name ;t h i s . age = age ;

    }}

    Chaque classe C# est dclar laide du mot cl class . Ce dernier est prcd de la visibilitde classe et est suivi par son nom. La construction dune classe C# est simple et trangementressemblante celle dune classe Java. Ainsi on peut modliser la rgle concernant les classes commececi :Class_Declarat ion

    : Modifiers_Opt c l a s s I d e n t i f i e r { . . . } ;

    A cette rgle, il est ncessaire dajouter quelques informations, comme les attributs C#(attention ne pas confondre avec les attributs de classes) qui sappliquent sur les concepts C#. Ilmanque aussi les dclarations dhritage (classe mre ou implmentation dinterfaces) ainsi que lecorps de la classe.

    Cest ainsi que lon obtient cette rgle :Class_Declarat ion

    : Attributes_Opt Modifiers_Opt c l a s s I d e n t i f i e rType_Parameter_List_OptClass_Base_Opt { Class_Item_Declarations_Opt } Semicolon_Opt;

    Pour comprendre cette rgle, chaque mot du vocabulaire non terminal est expliqu ci-dessous. Attributes_Opt dfinit lensemble des attributs applicables la classe. Modifiers_Opt liste les modifieurs de la classe ainsi que sa visibilit. Identifier donne le nom de la classe. Type_Parameter_List_Opt est un survivant de C++, il permet de paramtrer une classe

    (template). Class_Base_Opt liste les interfaces implmentes et la classe drive. Class_Item_Declarations_Opt donne le contenu de la classe (mthodes, attributs, ...).La premire approche tait donc de dcrire laide dune grammaire les diffrents objets

    du langage. La seconde est de dcrire la composition dun fichier source (unit de compilation).Les fichiers sources C# dont lextension est cs, ont la particularit de dcrire plusieurs namespaceset classes. A linverse de Java, qui oblige une dclaration de classe par fichier. Comme pour Java,le fichier est compos de deux parties, la premire partie est lensemble des rfrence aux classesextrieures, la seconde aux dclarations de classes.

    Cest pourquoi on obtient cette rgle :Compilation_Unit

    : Using_Directives_Opt Namespace_Item;

    Un fichier source peut tre aussi, un fichier vide. Cest dire que le fichier ne contienneaucune dclaration, il pourra contenir des attributs C#.

    La grammaire Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    21/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    Compilation_Unit: Using_Directives_Opt Attributes_Opt| Using_Directives_Opt Namespace_Item;

    Afin de pouvoir tablir une grammaire LALR et la plus proche de celle utilise par lescompilateurs C#, je me suis bas sur le travail ralis et sur des grammaires C# trouves en lignebases pour la plupart sur les spcifications ECMA-334. En particulier sur le travail dune quipequi dveloppe des parseurs indpendants [9] ou de dveloppeurs qui enrichissent la collection degrammaires pour loutil ANTLR (outil de compilation java) [10] [11].

    Le rsultat de mon travail est une grammaire qui reconnait lensemble des concepts C# lexception des blocs unsafe (lutilisation de pointeurs en C#).

    Cette grammaire possde 500 rgles, 150 axiomes et 150 lments du vocabulaire non ter-minal. Cette grammaire nest pas exhaustive, la grammaire dfinit seulement la smantique et lasyntaxe dune partie du langage C#.

    Un petit exemple

    Pour cet exemple :

    us ing System ;c l a s s He l lo{

    s t a t i c void Main ( ) {Console . WriteLine ("hello, world" ) ;

    }}

    Il est ncessaire dutiliser une quarantaine de rgles diffrentes :

    1. reconnaissance du symbole using ;2. reconnaissance de lidentifier System ! ;3. rduction par la rgle Identifier : ;4. rduction par la rgle Qualified_ID : Identifier ;5. reconnaissance du symbole ; ;6. rduction par la rgle Using_Directive : using Qualified_ID ; ;7. rduction par la rgle Using_Directives : Using_Directive ;8. rduction par la rgle Using_Directives_Opt : Using_Directives ;

    ...

    79. reconnaissance du symbole } ;80. rduction par la rgle Semicolon_Opt : ;

    La grammaire Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    22/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    81. rduction par la rgleClass_Decl : Attrib_Opt Mod_Opt class IdentifierType_Parameter_List_OptClass_Base_Opt { Class_Item_Decs_Opt } Semicolon_Opt ;

    82. rduction par la rgle Type_Decl : Class_Decl ;83. rduction par la rgle Namespace_Item_Decl : Type_Decl ;84. rduction par la rgle Namespace_Item : Namespace_Item_Decl ;85. rduction par la rgle Compilation_Unit : Using_Directives_Opt Namespace_Item ;

    3.3 Le mta modle C#

    3.3.1 Le mta modle ANT

    Sodifrance a crit son propre mta modle pour dcrire une application N-Tiers : ANT pourArchitecture N-Tiers. Lapprentissage des concepts prsents dans le mta modle ANT fut une tapeimportante de mon stage. La maitrise de ce mta modle est en effet indispensable : le mta modleC# est une extension du mta modle ANT, ils ont donc beaucoup de concepts en commun. De plus,je dois assurer la transformation de lun vers lautre.

    Le mta modle ANT est divis en 6 parties : Core : cest le noyau ANT. Il dfinit la racine des lments (ModelElement) et les packages

    (Package). Extensibility : dfinit les lments dextension des modles : par exemple TaggedValue

    et Stereotype. Object : dfinit les types de base (String, Float, etc.), les types spciaux (tableaux,

    numrations, etc.), les classes, les Feature (attributs, paramtres, etc.). GUI : dfinit tout ce qui concerne lIHM (fentres, widgets, lments graphiques de base,

    contrles orients base de donnes, etc.). Cinematic : dfinit tout laspect cinmatique dune application N-Tiers (transitions, v-

    nements, points dentre et de sortie, etc.). Semantics : cest la partie code, cest--dire les instructions (statements, expressions).

    Au total, ce sont plus de 300 classes qui composent ce mta modle. Le schma ci-dessous montreun extrait de la modlisation UML de la partie GUI du mta modle ANT.

    3.3.2 Les particularits du mta modle C#

    Le mta modle C# doit tre une extension du modle ANT. Ce dernier est orient Java,comme la comparaison C# - Java (Annexe F) indique des changements peu importants, le mtamodle ANT est proche de celui attendu.

    A laide de ltude sur le langage C# (Annexe E), nous avons constat que des lmentsmanquaient dans le modle ANT. Jai donc enrichi le mta modle ANT pour crer le mta modleANT-C#.

    La grammaire Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    23/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    Fig. 3.1 Extrait du mta modle C#.

    Lun des concepts qui nest pas prsent dans ANT est le concept de proprit. Les propritssappliquent sur un attribut (au sens attribut de classe).

    Par exemple, nous avons une classe voiture qui possde un attribut tailleReservoir

    pub l i c c l a s s Voiture{

    pub l i c i n t t a i l l e R e s e r v o i r ;}

    Dans le but de manipuler cet attribut on cre une proprit. Ainsi deux mthodes sontpossibles, le getter qui permet daccder sa valeur et le setter de la modifier. Les deux ne sont pasobligatoires.

    pub l i c c l a s s Voiture{

    p r i va t e i n t t a i l l e R e s e r v o i r ;pub l i c i n t Ta i l l eRe s e r v o i r {

    get { re turn t a i l l e R e s e r v o i r ; }s e t { t a i l l e R e s e r v o i r = value ; }

    }}

    La figure 3.1 montre un extrait du mta modle C# avec en particulier la modlisation duconcept de proprit prsent en C#.

    La grammaire Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    24/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    4 Rtro-ingnierie

    4.1 Un peu de cours

    4.1.1 Dfinitions

    Rtro-ingnierie est lactivit qui consiste tudier un objet pour en dterminer lefonctionnement interne.

    Dans la vie des applications, la plus grande partie du temps est pass maintenir et/ou faire voluer celles ci. Pour cela, il est ncessaire de connatre lapplication, cest dire les quipesqui lont dvelopp et qui lont document. Or la cration, souvent rapide, ne permet pas toujoursdassocier lapplication une documentation complte et une description dtaille. Cela pose unproblme par exemple, lorsque les quipes viennent changer.

    Cest pour cela quil existe les mthodes de rtro-ingnierie. Elle permet de retrouver les com-posants structurants lapplication. Associ une rtro documentation, les nouvelles quipes peuventfaire voluer ou maintenir lapplication.

    4.1.2 Travail

    Dans le panel des outils Sodifrance, on trouve la suite ESSOR. ESSOR analyse automati-quement les diffrentes applications des systmes dinformation et met disposition tous les outilsncessaires pour contrler, valuer et grer les patrimoines.

    La solution ESSOR offre : une vision globale et exhaustive du systme dinformation de puissantes capacits de cartographie et danalyse.Lintrt dutiliser un outil de cartographie et danalyse est de rsoudre tous les inconvnients

    des applications :1. lanciennet des applications ;2. une volumtrie importante ;3. la diversit technologique ;4. lempilage des maintenances ;5. le manque de documentation ;6. le dpart des sachants (quipes de dveloppement, de conception, ...) ;7. la difficult maintenir une base dinformations jour.

    Mon stage a aussi le but denrichir le rfrentiel de la suite ESSOR.

    Rtro-ingnierie Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    25/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    4.2 Les outils existants

    4.2.1 Reflector for .NET

    Loutil Reflector for .NET [12] cre par Lutz Roeder est un navigateur de classes et undcompilateur. En effet, il permet dexplorer, danalyser et de consulter la documentation et le codedes programmes .NET. Il travaille sur les assemblies C#, Visual Basic et MSIL.

    Loutil possde une architecture plugins. En effet, cet outil peut tre surcharg de plugins.Pour dvelopper un plugin pour Reflector, il suffit de crer un programme qui implmente linterfaceIPackage. Cette interface possde deux mthodes implmenter load et unload . Ces mthodesseront appeles lors du chargement du plugin (View | Add-Ins ) ou du dchargement.

    Les avantages de ce principe sont de permettre chaque utilisateur diffrent dajouter lesfonctionnalits dsires.

    Reflector utilise CLI Header afin de rcuprer les informations sur lapplication.

    Avec cet outil une application .NET peut tre dsassemble. Le code dun excutable (exeou dll) qui sexcute dans la plateforme .NET peut tre visible grce cet outil. On obtient aussiles dpendances avec les librairies et autres applications. La manipulation des donnes peut treeffectue de plusieurs manires soit le code est visible sous format texte standart soit lapplicationpeut tre vu de faon graphique ou interprte.

    La figure D.3 (page 53) montre le rsultat de la dcomposition dune application .NET.

    Certains plugins permettent dafficher graphiquement les dpendances entre les classes et lesnamespaces. La figure D.2 (page 52) montre le rsultat de lun dentre eux.

    4.2.2 Autres applications

    Il existe dautres applications plus ou moins connues qui permettent de rcuprer du code(soit intermdiaire soit haut niveau comme C#) partir du code intermdiaire ou directement partirde lexcutable. Je nai test aucune de ces applications (par manque de temps). La description quejen fait, est celle trouve sur les sites officiels et sur un site qui rpertorie diffrents outils daide audveloppement .NET [13].

    Si je devais en retenir que deux, cest surement lapplication de Microsoft et celle du projetMono qui retiendrait mon attention, mme sil semble quelle ne permet que de trouver du codeintermdiaire.

    Rtro-ingnierie Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    26/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    Nom Entre Sortie CommentairesILDasm .EXE ou .DLL IL Cest lutilitaire de Microsoft.[14]

    Il est fournis avec le SDK.Monodis .EXE ou .DLL IL Cest lutilitaire du projet Mono

    [15]Anakrino1 MSIL C# Il sapplique seulement sur la pla-

    teforme .NET 1.1 [16]Salamander .EXE ou .DLL C#, VB.NET,

    ...Convertis les applications en lan-gage haut niveau [17]

    Asmex .EXE ou .DLL IL [18].Net Explorer .EXE ou .DLL IL [19]Spices.Net .EXE ou .DLL IL, C#, C++,

    VB.Net, J#,Delphi.Net

    [20]

    Dis# .EXE ou .DLL C#, VB.NET,Delphi.NET andChrome

    [21]

    4.3 La cration du modle

    4.3.1 Quelle approche

    La rtro ingnierie consiste retrouver les diffrentes caractristiques dun programme. Ausein de Sodifrance, il existe de nombreux outils permettant de travailler sur les sources de diffrentslangages de programmation.

    Lapproche Sodifrance

    La mthode dapproche pour ce cas est approximativement la mme que pour les autreslangages (approximativement puisque dun langage un autre, les mmes concepts changent et leursapplications aussi, lapproche est alors adapte la situation).

    Le but de cette approche est de crer laide de loutil cre par TGen un outil pour parserles codes sources dapplication. Cette tape va permettre de crer une instance de notre mta modle.

    Cette instance permettra par la suite dintgrer des applications de cartographie.

    Nous possdons un mta modle ainsi quune grammaire qui permet de valider de nombreuxexemples de codes sources. Je vais appliquer chaque rgle de la grammaire une action qui instancieranotre mta modle.

    Mon projet

    Pour cette partie, mon approche consiste instancier en premier les objets (autrement dit decrer des instances des objets haut niveau sans ses caractristiques. Dans un second temps, jenrichirai

    1Anakrino comme Reflector sont deux outils que Microsoft cite sur son site MSDN.

    Rtro-ingnierie Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    27/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    mon modle en ajoutant chaque objet ses caractristiques.

    Dans de grosses applications, le modle obtenu est important, la manipulation de ce genre demodle demande dimportantes ressources. Un moyen existe pour limiter le chargement en mmoirede lensemble de lapplication. En effet, ce chargement peut se faire en deux tapes. La premireconsiste charger tous les objets sans leurs caractristiques. La seconde tape chargera en mmoireseulement (en plus du chargement de la premire tape) le fichier source courant. Ainsi chaquerfrence pourra tre rsolu, et chaque fichier analys.

    Dans le projet, tel quil est actuellement, ces deux tapes sont confondues. Une erreur im-portante qui complique la rsolution des rfrences. Le problme de mmoire dans le cas des tests estaccessoire car les applications manipules ne contiennent pas plus de 100 fichiers sources chacune.

    Nous choisissons de travailler en C++ dans le but dtendre au maximum lexprience multi-langages.

    4.3.2 Le code

    Les actions

    Pour crer ce modle, nous ajoutons aux rgles de la grammaire des actions. Cest dire,pour chaque rgle qui le ncessite on cre une action. Ainsi la rgle qui dfinit lobjet classe :

    Class_Decl : Attrib_Opt Mod_Opt c l a s s I d e n t i f i e r Type_Parameter_List_OptClass_Base_Opt { Class_Item_Decs_Opt } Semicolon_Opt

    Cette dernire sera enrichi par laction :

    { classDecl_Attr ibOpt :ModOpt : C l a s s I d e n t i f i e r : TypeParameterListOpt : ClassBaseOpt :ClassItemDecsOpt : SemicolonOpt : }

    Une action est une suite de mots cls reprsentant un lment du vocabulaire non terminal (cest dire lappel une autre rgle de la grammaire). Chaque mot cl est suivi dun "deux-points" (colon).Lensemble des actions sont gnrs de faon automatique.

    Laction sera traduite en une mthode C++, qui attendra du code C++, et renverra lobjet(ici, elle renvoie la classe cre).

    Un exemple dimplmentation

    Reprenons notre exemple. Lorsque cette rgle est reconnue, cest quune classe t dtecte.Dans notre modle nous allons donc crer un objet C# class . Cet objet possde de nombreusescaractristiques : son nom, son accessibilit, ses attributs C#, ses parents (classe ou interfaces), sesfeatures. Toutes ses informations seront rcupres au moyen de variables. Ainsi le code de notreinstanciation ressemble ceci :

    1. On cre un nouvel objet class

    ClCSharpClass pItem = new ClCSharpClass ( ) ;

    2. On y ajoute ses modifieurs

    Rtro-ingnierie Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    28/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    i f ( $2 != NULL) { // Mod_Optl i s t l s t = ( ( TgenOrderedChildren ) $2 )>asF l a tL i s t ( ) ;pItem>S e tV i s i b i l i t y ( Mod_Vis ibi l i ty ( l s t ) ) ;. . .

    }

    3. On lui attribut son nom

    pItem>SetName ( ( ( TgenSemString ) $3 )>GetVal ( ) ) ; // I d e n t i f i e r

    4. On lui ajoute la classe parente si elle existe

    i f ( $5 != NULL) { // Class_Base_Optl i s t l s t = ( ( TgenOrderedChildren ) $5 )>asF l a tL i s t ( ) ;whi l e ( ! l s t . empty ( ) ) {pItem>AddParentC la s s i f i e r ( ( C lCSharpCla s s i f i e r ) l s t . f r on t ( ) ) ;l s t . pop_front ( ) ;

    }}

    5. On lui ajoute ses fils (attributs et mthodes)

    i f ( $6 != NULL) { // Class_Item_Decs_Optl i s t l s t = ( ( TgenOrderedChildren ) $6 )>asF l a tL i s t ( ) ;whi l e ( ! l s t . empty ( ) ) {i f ( l s t . f r on t ( )>IsKindOf (RUNTIME_CLASS( ClCSharpFeature ) ) ) {pItem>AddFeatures ( ( ClCSharpFeature ) l s t . f r on t ( ) ) ;

    } e l s e i f ( l s t . f r on t ( )>IsKindOf (RUNTIME_CLASS( C lCSharpCla s s i f i e r ) ) ) {pItem>AddInne rC l a s s i f i e r s ( ( C lCSharpCla s s i f i e r ) l s t . f r on t ( ) ) ;

    }l s t . pop_front ( ) ;

    }}

    6. Et on renvoie lobjet ainsi cre

    r e turn pItem ;

    Linstantiation

    Cette partie est la plus grosse partie de mon travail, mme si aujourdhui elle nest pastermine. En effet, il est ncessaire de reprsenter toutes les informations contenues dans le codedans le mta modle, de faon retrouver tous les objets et liens entre les objets.

    Pour mener bien ce travail, on doit :1. Crer chaque objet et ses caractristiques2. Lis les objets entre eux :

    la notion de "owner". Par exemple, reli lattribut de classe sa classe ( laquelle il appar-tient).

    les notions dhritage. Par exemple, reli la classe sa classe abstraite.

    Rtro-ingnierie Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    29/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    les rsolutions de types (variables locales ou attributs). Par exemple, reli le type dunevariable avec la classe dfinie dans le mme namespace.

    3. Les appels de variables et de mthodes.Pour la cration des objets, le travail nest pas trs compliqu, dans la plupart des cas le new

    est suffisant. Pour les liaisons entre objets, cela se complique.

    Les liaisons parent - fils le travail est mach par la rgle. Avec lexemple de lattribut, onaura un attribut prsent dans la liste Class_Item_Decs_Opt. Un ajout dans les features de la classesuffira.

    Pour les liaisons de "types", plusieurs cas sont possibles. Soit le type est dclar dans lemme namespace et avant cette rfrence, dans ce cas, la rfrence est trs rapide. Soit le typeest plus "loign", il est alors ncessaire de consulter lensemble des dfinitions de types (classes,structures, ...) disponibles.

    Pour rsoudre les appels, le travail est plus compliqu. Pour les variables locales, lalgorithmesuivant permet de retrouver de faon propre et sr la dclaration de la variable.

    On suppose que nous sommes dans un ensemble de statements. Il existe deux types destatements. Le premier est un statement simple qui nimplique que lui mme, comme lappel dunemthode. Le second est un statement qui possde un corps comme le for. Ce second type de statementest important car il implique des sous blocs. On inclut dans les statements de bloc les dclarationsde paramtres ainsi que les dclarations ditrateurs.

    Soit notre exemple suivant :une_methode (Un_Type un_premier_parametre , Un_autre_type un_second_parametre ) {

    un_statement_A ;un_statement_B ;for_statement ( e n t i e r un_iterateur ) {

    un_statement_C ;un_statement_D ;un_appel_x ;

    }}

    Pour rsoudre lappel x, nous appliquons lalgorithme qui suit :Tant que ( trouv == faux ) f a i r e

    On regarde l e s statements prcdents .S i l e b loc courant e s t un sous b loc a l o r s on remonte au b loc sup r i eu r

    .S i l e b loc courant e s t l e corps d une mthode a l o r s on recherche dans

    l e s a t t r i b u t s de l a c l a s s e .

    Dans la pratique, cet algorithme nest pas si simple. En effet, dans notre cas, nous avons unmta modle qui ne permet pas la navigation des liens qui ne sont pas nomms. Ce bmol impliqueque dans certaines associations, nous pouvions naviguer que dans un seul sens. Nous ne pouvons pasaccder alors au bloc suprieur.

    Deux possibilits viennent nous : La premire est de remettre les liens anonymes au seinde notre mta modle. La seconde est de dire, si on ne peut pas naviguer de bas en haut, alorsnaviguons de haut en bas. Dans cette seconde solution, le cout dexcution risque de salourdir. De

    Rtro-ingnierie Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    30/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    plus la navigation de haut en bas ne nous permet pas de dtecter la variable correspondante. Ainsisi deux variables ont une porte sur le mme bloc, il est difficile de savoir, laquelle est la variableappele.

    Si nous revenons notre exemple, pour rsoudre x dans la premire solution : On regarde si les statements D ou C sont des dclarations de x. Si x nest pas dclar, on regarde litrateur du for. Si x nest pas dclar, on remonte et on regarde les statements B et A. Si x nest pas dclar, on regarde les paramtres de la mthode. Si x nest pas dclar, on regarde les attributs de la classe. Pour rsoudre x dans la deuxime solution :

    On regarde si la variable est dclar dans la mthode, Sil existe une variable de mme nom, on vrifie que sa porte corresponde lappel de

    la variable. Si non, on regarde les attributs de la classe.

    Rtro-ingnierie Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    31/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    5 Migration C# - Java

    5.1 Un peu de cours

    5.1.1 Dfinitions

    Une transformation prend un modle source en entre et fournit un modle cible ensortie.

    Il existe deux transformations diffrentes : Transformation endogne

    Dans le mme espace technologique Les modles source et cible sont conformes au mme mta-modleex : Transformation dun modle UML en un autre modle UML

    Transformation exogne Entre 2 espaces technologique diffrents Les modles source et cible sont conformes des mta-modles diffrentsex : Transformation dun modle UML en programme Javaex : Transformation dun fichier XML en schma de BDD

    La transformation permet une application de changer de technologie. Les raisons de cechangement permet de faire voluer les outils avec les nouvelles technologies.

    5.1.2 Travail

    Mon travail est de transformer des applications dveloppes pour les plateformes .NET critesen C# vers des applications pour les plateformes J2EE crites en Java. Les raisons qui pourraientdemander un tel changement sont :

    une volution possible vers un format open source un changement dquipe ...Cette transformation doit traduire les applications C# en Java. A laide de loutil MIA-

    Transformation une transformation est ralise.

    Migration C# - Java Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    32/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    5.2 La comparaison C# - Java

    5.2.1 La diffrence dun point de vue philosophique

    Le langage C# est un langage cre par Microsoft pour sa plateforme .NET. Cette dernirea pour but de concurrencer le langage Java et les environnements concurrents. En effet, .NET estconu pour permettre nimporte quel langage de sexcuter sur la plateforme. Microsoft veut crerune plateforme ouverte tous. Chaque informaticien a son langage prfr et Microsoft fait le paride tous les regrouper. Pour cela, il fait certifi par ECMA son CLI (cf. Annexe C).

    Le langage Java est dvelopp par Sun. Il existe trois versions diffrentes de plateforme :J2ME, J2SE et J2EE. Sur ces dernires, un seul langage est excutable : le langage Java. Mais lesplateformes sont dveloppes pour une multitude de systmes dexploitations afin que les programmescrits en java soit excut partout.

    Mme si Microsoft sest appuy sur Java pour crer C#, la base de ce langage est trsnettement influenc par le C++.

    5.2.2 La comparaison

    La comparaison complte entre les deux langages demande beaucoup de temps. Ici je vaissimplement citer les concepts qui sont communs ou diffrents. Dans lannexe F, vous trouverez unecomparaison plus "pratique".

    Si vous voulez en savoir plus sur la comparaison entre ces deux langages, le Web est remplidarticles sur le sujet [22][23][24][25][26], mais je vous conseille de consulter la page de Dare Obasanjo[27].

    Ci dessous, un rsum de tous les ides de cette comparaison.

    1 Les concepts et caractristiques presqueidentiques en C# et en java.

    1. tout est objet (en java : Object, et C# :object)

    2. des mots cls proches (cf. Annexe G)

    3. des machines virtuelles et des langagesdexcution pour un fonctionnementsimilaire

    4. un Garbage Collector et gestion de lammoire identique

    5. les mmes tableaux

    6. il nexiste pas de mthodes globales

    7. les interfaces, oui, lhritage multiple,non.

    8. les chanes de caractres ne peuventpas tre modifies

    9. les classes non extensibles10. leve et capture dexceptions11. initialisation de membres et construc-

    teurs statiques12. boxing et unboxing

    2 Les concepts et caractristiques qui dif-frent seulement par la syntaxe.1. la mthode main2. la syntaxe dhritage3. lidentification de type (is ou instan-

    ceof)4. les espaces de noms5. les constructeurs, les destructeurs et

    les finaliseurs6. la synchronisation de mthodes7. les accesseurs et modifieurs

    Migration C# - Java Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    33/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    8. loutil "Reflection"9. la dclaration de constantes10. les types primitifs11. le dclarations de tableaux12. lappel du constructeur de base13. la liste de paramtres au nombre ala-

    toire14. les types gnriques15. la boucle foreach16. les mta donnes17. les numrations

    3 Les concepts et caractristiques quiexiste en C# et Java mais implmentdiffremment.

    1. les classes imbriques2. les membres volatiles et les threads3. la surcharge doprateurs4. linstruction switch5. les assemblies6. les collections7. linstruction de saut goto (non impl-

    ment en java)8. les mthodes virtuelles9. la gestion des fichiers (lecture/cri-

    ture)10. la srialization dobjets11. la gnration de documentation par-

    tir de commentaires.

    12. Dfinition de plusieurs classes dans unfichier pour C#

    13. limportation de librairies14. les vnements15. lintroprabilit des langages

    4 Les concepts et caractristiques quinexiste quen C#.

    1. la libration dterministe dobjets2. les dlgus3. les structures4. lidentification de type dynamique5. les proprits6. les tableaux plusieurs dimensions7. les indexeurs8. les directives de pr processeur9. les alias10. la gnration de code dynamique11. les pointeurs et code Unsafe12. le passage par rfrence13. les caractres spciaux14. la dtection doverflow15. limplmentation explicite dinterface16. les iterateurs17. les types partiels18. les classes statiques19. les types nullables20. les mthodes anonymes

    Migration C# - Java Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    34/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    Fig. 5.1 Schma de la transformation.

    5.3 Les rgles de transformation

    5.3.1 Processus de transformation

    La transformation du langage C# vers Java demande avant tout une tude des diffrencesentre ces deux langages. Le langage Java est trs utilis dans la formation universitaire, son tudea donc t trs rapide. A linverse le langage C# tait inconnu. Son tude a t trs intressante,mais je ne peux pas prtendre tout connatre. Il existe encore quelques points qui me sont encoreinconnus.

    Aprs ltude des 2 langages, il fut ncessaire de comparer ces deux langages et de comprendrecomment des concepts qui existe en C# mais pas en Java doivent tre traduit. De plus, la comparaisonpermet aussi de confronter la concurrence de deux langages, leur points forts et leurs points faibles.Il est dailleurs possibles pour chaque internaute, laide de notre ami Google [28] de consulter tousles dbats "C# - Java".

    La comparaison des deux langages nest pas complte dans ce rapport. Lannexe F permetde comprendre rapidement ce qui diffrencie les deux langages.

    La comparaison termine, il est ncessaire de passer au codage de la transformation. Pourcela, on va diviser les rgles de transformation en trois parties :

    les entits les attributs les liens

    Migration C# - Java Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    35/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    Fig. 5.2 Schma de lexemple de modle C#.

    5.3.2 La transformation

    Dans cette transformation de nombreux objets ne devront pas subir de changements. Eneffet, la transformation concerne deux mta modles : ANT et ANT-C#. Le dernier mta modleest une extension du mta modle ANT cest pourquoi de nombreux objets ne subiront pas detransformation.

    Dans notre approche, nous commencerons "cloner" tous les objets C# en objets ANT.Puis nous leur rajouterons leurs attributs, enfin nous recrerons tous les liens.

    Bien sr pour les objets qui diffrent entre ANT et ANT-C# la mthode sera diffrente.Ainsi, des manipulations de larbre modle et des changement dans les proprits des objets seronteffectus. De plus, de nouveaux objets seront crs.

    Lexemple des proprits

    Pour illustrer la transformation, nous prenons ce petit exemple (le schma obtenu aveclanalyseur, figure 5.2 - le corps des mthodes nest pas reprsent) :

    Cest une classe appel File qui possde un attribut mSize et une proprit.

    pub l i c c l a s s F i l e{

    p r i va t e i n t mSize ;pub l i c i n t S i z e{

    get { re turn mSize ; }s e t { i f ( va lue < 0) mSize = 0 ; e l s e mSize = value ; }

    }}

    La transformation de ce modle :

    Migration C# - Java Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    36/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    Fig. 5.3 Schma dun extrait de lexemple de modle Java.

    1 Copie des lments identiques. Cest dire reproduction du modle dans ce qui estcommun au deux mta modle, le rsultat est obtenu en figure 5.3.

    Le code qui permet de transformer une classe ANT-C# en ANT (simple recopie) possdedeux variables object et outObject, relis entre deux par un lien de transformation. Ce dernier serautilis dans les autres rgles afin de retrouver les informations des deux modles.

    2 Cration de nouveaux lments. Cest dire, on transforme le modle ANT-C# en ANT.Pour notre exemple, il sagit de supprimer lobjet C# Proprety.

    On va alors modifier les deux mthodes afin de les intgrer notre nouveau modle, lersultat obtenu est la figure 5.4.

    Ainsi pour chaque objet spcifique C#, une rgle de transformation a t labore. Chacunede ces rgles modifie larbre du modle.

    A la fin de la transformation, nous avons un modle ANT (pseudo Java) permettant parla suite de gnrer le rsultat. Le gnrateur Java utilis pour ce stage est un gnrateur qui ne

    Migration C# - Java Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    37/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    Fig. 5.4 Schma de lexemple de modle Java.

    permet pas toutes la gnration de tous les concepts Java 5. Pour une utilisation complte de cettetransformation, un travail complmentaire est attendu pour la transformation ainsi que la gnration.

    Migration C# - Java Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    38/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    Conclusion

    Au cours de ce stage, jai beaucoup appris. Les apports que jai tir de cette exprienceprofessionnelle peuvent tre regroups autour de trois ides principales : les comptences acquises,les difficults rencontres et solutions apportes ainsi que la vie en socit.

    Les comptences acquises

    Le stage ma permis de prendre en considration tous les aspects dun projet professionnel.Cest ainsi, que jai t inform des attentes des clients et de limportance dun travail ralis avecmthodologie et prcision. Mme si un programme a toujours des bugs non identifi, il est importantque lapplication dveloppes fonctionne pour de nombreux cas, et surtout pour tous les cas courant.

    Les comptences acquises durant ce stage inclus lutilisation doutils. En effet, jai manipuldes outils spcifiques tel que T-gen et la suite MIA. Jai pu aussi complter ma formation et monexprience au langage C++ laide de loutil Visual C++.

    Ma connaissance des langages C# et Java sest agrandie grce ltude de ces langages etde leurs diffrences.

    Les difficults rencontres et solutions apportes

    Le stage ne possdait pas de difficults particulire, mais comme tout projet des problmesse sont poss.

    La premire des difficults est de russir trouver une grammaire qui permet daccepter lelangage. Une grammaire tel que celle que dcrit par ECMA[6] C# nest pas LALR. Dans mon cas,la grammaire utiliser ce devait dtre LALR, ce qui implique quun nombre de concept C# nepeut tre accept dans ma grammaire. En effet, il a fallu choisir et laisser des composants les moinsutiliss.

    La seconde des difficults se trouve dans limplmentation des rgles ou plutt dans le testde ces rgles. A laide de plusieurs centaines de fichiers sources C# jai test le parseur. Mais toutesles rgles ntaient pas appeles. Cest pourquoi, il a fallu identifier les rgles qui ntaient jamaisutilises. Suite ce constat, je me suis aperu que certaines rgles ne seraient jamais appeles dansun fichier source bien form.

    La dernire difficult porte sur lensemble du projet. Certaines parties nont pas pu tretermines dans les temps, il a fallu repousser les chances. Aprs 5 mois de stage, le travail nest pascomplet, en effet le temps pass sur la grammaire et sur le parseur a t trs important. Les autresparties ont du tre lgrement rduite.

    Conclusion Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    39/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    La vie en entreprise

    Mon stage chez Sodifrance a t trs instructif. Au cours de ces 5 mois, jai ainsi pu observerle fonctionnement dune socit de service en informatique (SSII et ditrice de logiciel). Les relationshumaines entre les diffrents employs de la socit, indpendamment de lactivit de chacun deux,ma appris sur le comportement avoir en toute circonstance.

    Le stage

    Cartographier un programme, cest comprendre comment fonctionne celui-ci, crer loutil quiva le permettre, cest comprendre comment le langage fonctionne. Transformer une application dunlangage un autre permet de suivre les nouvelles directives, mais tudier la transformation permetde comprendre ce qui diffrencie deux langages concurrents.

    A titre de conclusion, il semble intressant de mettre en vidence lvolution grandissantedu monde automatique qui nous entoure. A la prhistoire de linformatique, ce domaine tait limit quelques machines trs imposantes. Depuis les machines se sont multiplis et se sont miniaturises,et font que chaque pas de lhomme est guid par un ou plusieurs ordinateur. Mon stage a permisde comprendre que lavenir de linformatique ne se joue plus avec une plateforme particulire, maisavec des changements frquents de technologie. Comme les vtements, linformatique a ses modes.Aujourdhui, la mode est au Java-J2EE, mais demain la mode se penchera peut tre sur .NET ouC++. Il en rsulte un fort attrait pour les techniques de cartographie indpendantes du langage, dela plateforme pour permettre des volutions rapides quelque soit la nouvelle mode.

    Aprs le stage

    Le regain dintrt des socits de services pour le recrutement dingnieurs informaticiensdbutants nous permet de voir positivement notre entre dans le march du travail. Il est quandmme ncessaire de surveiller ce phnomne, certains ny croient pas et pensent plutt des effetsdannonces.

    Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    40/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    Bibliographie

    [1] Microsoft Corporation. Microsoft visual c++, 1998. http://msdn2.microsoft.com/fr-fr/visualc/.

    [2] Justin O. Graver. T-gen, 1994. http://st-www.cs.uiuc.edu/users/droberts/tgen2.2.1/tgen.html.

    [3] MIA Software. Mia studio, 2007. http://www.mia-software.com.[4] Paul B Mann. A translational bnf grammar notation (tbnf). SIGPLAN Not., 41(4) :1623,

    2006.[5] OMG. Mof qvt final adopted specification. Specifications 05-11-01, OMG, November 2005.[6] ECMA International. C# Language Specification, volume ECMA 334. ECMA International, Rue

    du Rhne 114 - CH 1204 - Geneva, 4th edition, June 2006. http://www.ecma-international.org/.

    [7] Miguel de Icaza. Mono. http://www.mono-project.com.[8] Eliane Consola. La plate-forme de dveloppement mono. Journal du Net, July

    2007. http://www.journaldunet.com/developpeur/technos-net/07/csharp/0724-expliquez-moi-mono.shtml.

    [9] Devin Cook. C# grammar, September 2006. http://www.devincook.com/GOLDParser/grammars/.

    [10] K.Rajendra Kumar. C# grammar file, October 2003. http://www.antlr.org/grammar/list/.[11] Kunle Odutola. kcsparse - an ecma-334 c# grammar sample for antlr v2.7.6, December 2005.

    http://www.antlr.org/grammar/list/.[12] Lutz Roeder. Reflector for .net, 2007. http://www.aisto.com/roeder/dotnet/.[13] Fabrice MARGUERIE. Madgeek Sharp Toolbox, 2007. http://sharptoolbox.com/.[14] Microsoft. ILDasm.[15] Paolo Molaro Miguel de Icaza and Dietmar Maurer. Monodis.[16] Saurik. Anakrino, 2004. http://www.saurik.com/net/exemplar/.[17] Dr. Huihong Luo. Salamander, 2006. http://www.remotesoft.com/salamander/.[18] Benjamin Peterson. Asmex - .NET Assembly Examiner, 2003. http://www.jbrowse.com/

    products/asmex/.[19] Remotesoft. Remotesoft .NET Explorer, 2004. http://www.remotesoft.com/dotexplorer/.[20] 9rays. Spices.Net Suite. http://www.9rays.net/Products/Spices.Net/.[21] NETdecompiler.com. Dis#, 2006. http://www.netdecompiler.com/.[22] Wikipdia. Comparison of c sharp and java. Wikipdia, 2007. http://en.wikipedia.org/

    wiki/Comparison_of_C_Sharp_and_Java.[23] Anand Narayanaswamy. Java and c-sharp compared. C# Help. http://www.csharphelp.com/

    archives/archive96.html.

    BIBLIOGRAPHIE Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    41/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    [24] Raffi Krikorian. Contrasting c# and java syntax. OReilly WindowsDevCenter.com, 2001.http://www.ondotnet.com/pub/a/dotnet/2001/06/14/csharp_4_java.html.

    [25] Frank McCown. Java (j2se 5.0) and c# comparison. Harding.edu, 2006. http://www.harding.edu/fmccown/java1_5_csharp_comparison.html.

    [26] Jae-Hoon CHOI. Converting c# to java. kaistizen.net, 2006. http://kaistizen.net/Project/CSharpJava/csharp_java.htm.

    [27] Dare Obasanjo. A comparison of microsofts c# programming language to sun microsystemsjava programming language. 25hoursaday.com, 2007. http://www.25hoursaday.com/.

    [28] Larry Page et Sergey Brin. Google. http://www.google.fr.[29] Microsoft. Programmation en C#. Microsoft Corporation, 2002. Microsoft Official Course

    2132A.[30] Jean-Franois Bobier. Microsoft .net : Architecture et services. Mmoire, cole Nationale

    Suprieure des Tlcommunications, July 2001.[31] Craig Utley. .net : dix arguments pour se dcider. JDN Developpeurs, January 2003. http:

    //www.zdnet.fr/actualites/informatique/0,39040745,2127705,00.htm.[32] WikiPedia, a web-based, free-content encyclopedia. http://www.wikipedia.org.[33] Steve Lewis and Wilhelm Fitzpatrick. A java programmer looks at c# delegates. OnJava.com,

    2003. www.onjava.com/pub/a/onjava/2003/05/21/delegates.html.[34] OMG. Unified modeling language : Superstructure. Specifications 07-02-05, OMG, February

    2007.[35] OMG. Unified modeling language (uml) specification : Infrastructure. Specifications 04-10-14,

    OMG, October 2004.[36] ECMA International. Common Language Infrastructure (CLI), volume ECMA 335. ECMA

    International, Rue du Rhne 114 - CH 1204 - Geneva, 4th edition, June 2006. http://www.ecma-international.org/.

    [37] Leslie Lamport. LATEX. http://www.latex-project.org.

    BIBLIOGRAPHIE Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    42/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    Index

    - Symboles -.Net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

    - A -ADO.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46ANTLR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11, 46ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46ATL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12, 46Attribut C# . . . . . . . . . . . . . . . . . . . . . . . 21, 49, 108

    - B -BNF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

    - C -C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54CLR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18, 46

    - D -DSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13, 46

    - E -ECMA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19, 20, 46EPL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12, 47ESSOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25Essor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

    - G -GLR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12, 47GNU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11, 47GNU GPL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47Grammaire . . . . . . . . . . . . . . . . . . . . . . . . . . 11, 18, 22

    - H -HJ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9, 47

    - I -Implmentation des rgles . . . . . . . . . . . . . . . . . . . . 9

    - J -J2EE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19, 47

    - L -LALR . . . . . . . . . . . . . . . . . . . . . . . . . . . 12, 19, 39, 47LINA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12LIP6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12LL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11, 12, 47LR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11, 47

    - M -Mta modlisation et grammaire C# . . . . . . . . . 9MDA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4, 47MIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8, 13, 47MIA DSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13MIA Gnration . . . . . . . . . . . . . . . . . . . . . . . . 12, 13MIA Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13MIA Transformation . . . . . . . . . . . . . . . . . . . . . . . . 13MIATL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12, 47MSIL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19, 47, 114

    - N -NFP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

    - O -OMG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12, 48

    - P -Planning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9Prise en main des outils . . . . . . . . . . . . . . . . . . . . . . 8

    - Q -QVT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12, 48

    - R -Rapport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9RL-TL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

    INDEX Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    43/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    - S -SDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48SLR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12Sodifrance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47Solution de migration C# vers Java . . . . . . . . . . 9Soutenance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9SSII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

    - T -T-gen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

    - U -UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

    INDEX Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    44/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    Table des figures

    1.1 Rpartition du CA 2006 par mtier et par secteur dactivit. . . . . . . . . . . . . . . 4

    1.2 Rpartition des effectifs 2006 en France et en Belgique. . . . . . . . . . . . . . . . . . 6

    1.3 Schma synthtique des diffrents composants et leurs changes de donnes. . . . . . . 7

    1.4 Dcoupage du temps de travail. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    1.5 Dure tablie pour chacune des tches. . . . . . . . . . . . . . . . . . . . . . . . . . . 9

    1.6 Rpartition des tches en jours par semaine. . . . . . . . . . . . . . . . . . . . . . . . 10

    2.1 TGEN : loutil. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

    2.2 MIA-Transformation : les rgles de transformation. . . . . . . . . . . . . . . . . . . . 15

    2.3 MIA-Transformation : la lecture de modles. . . . . . . . . . . . . . . . . . . . . . . . 16

    3.1 Extrait du mta modle C#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

    5.1 Schma de la transformation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

    5.2 Schma de lexemple de modle C#. . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

    5.3 Schma dun extrait de lexemple de modle Java. . . . . . . . . . . . . . . . . . . . . 37

    5.4 Schma de lexemple de modle Java. . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

    C.1 Vue densemble du CLI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

    C.2 Composition du CLI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

    D.1 Une application .NET (crite en C#). . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

    D.2 Modlisation des composants dune application .NET laide de loutil Reflec-tor for .NET et un plugin (Pelis Assembly Graph). . . . . . . . . . . . . . . . . . . . 52

    D.3 Une application .NET (crite en C#) dsassemble par loutil Reflector for .NET. . . 53

    D.4 Mtrique sur le code des mthodes dune application .NET laide de loutil Reflec-tor for .NET et un plugin (CodeMetrics). . . . . . . . . . . . . . . . . . . . . . . . . . 53

    TABLE DES FIGURES Mathieu ALBERTCe document est la proprit du Groupe Sodifrance.

    Il ne peut tre reproduit, mme partiellement, sous quelque forme que ce soit, sans autorisation crite pralable.

    45/116

  • Reverse engineering C# and .NetStage de fin dtudes - MASTER PRO ALMA 2007

    A Abrviations

    ADO (ActiveX Data Object), Technologie Microsoft fournissant une interface daccs aux donnesdans lenvironnement Windows. Elle permet aux programmes clients daccder aux donnes, etde les manipuler, dans un fichier ou un serveur de base de donnes.

    ADO.NET est lvolution XML du modle daccs aux donnes ADO. Il est construit partir de etpour des applications faible couplage. ADO.NET garantit lindpendance des dveloppementspar rapport aux systmes de gestion de donnes

    ANTLR (ANother Tool for Language Recognition) a t cr par Terence Parr lUniversit deSan Francisco. Cest un framework de construction de compilateurs, traducteurs bas sur unedescription grammaticale contenant des actions Java, C#, C++, ou Python.

    ASP.NET est un ensemble de composants et une infrastructure simplifiant le dveloppement dap-plications Web et de services Web XML. Le programmeur peut dvelopper dans nimporte quellangage des lments de site Web qui seront compils sur le serveur. Le rsultat est accessible partir de nimporte quel terminal.

    ATL (ATLAS Transformation Language) est un langage de transformation de modles implmen-tant le standard QVT de lOMG.

    ATLAS est un projet de lINRIA cr en janvier 2004 entre lINRIA-Rennes et lUniversit deNantes pour travailler sur la gestion des donnes complexes dans les systmes distribus.

    BNF (Forme de Backus-Naur) est une notation permettant de dcrire les rgles syntaxiques deslangages de programmation. Cest donc un mtalangage.

    CA est le chiffre daffaire dune entreprise sur un exercice comptable.CIL (Common Intermediate Language) est le lang