IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Reverse code c++


Sujet :

C++

Vue hybride

delta07 Reverse code c++ 18/09/2012, 16h15
Bousk Bonjour, StarUML permet ça... 18/09/2012, 16h18
Daïmanu Salut, Le logiciel... 18/09/2012, 19h18
koala01 salut, d'aabord, il faut... 19/09/2012, 00h03
JolyLoic J'aime beaucoup BoUML pour... 19/09/2012, 08h08
delta07 Et bien merci de ces... 19/09/2012, 08h50
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 194
    Par défaut Reverse code c++
    Bonjour a tous

    Voila, je viens de débarquer dans une entreprise ou on me demande de bosser sur une grosse application c++. Mais cette appli a été codée et est utilisée sous linux, et a été affuble d'extension telles que .hh et .cc.
    De plus les fichiers ont été quelque peu classe étrangement... avec d'autre fichiers, tel des "makefile" ou encore des bouts de script en python. Et bien sur il n'y a ni doc ni commentaire a propos de ce code...Je suis en plus complètement néophyte en matière de c++.

    Ma question est donc celle ci : existe-t-il un moyen de faire du reverse code afin de générer au moins un UML ? Genre lui donner un répertoire et hop il rame et me donne un joli diagramme pour que je puisse comprendre ce meli-melo ?

    J'ai essaye visual pradigm, mais il semble planter des que je lui donne les fichiers sources, peut etre a cause des extensions bizarres.
    Merci de votre aide en tous cas.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    StarUML permet ça en lui fournissant des header à analyser.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    735
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 735
    Par défaut
    Salut,

    Le logiciel Umbrello permet de faire du reverse engineering il me semble (il est disponible sous Linux).

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    salut,
    d'aabord, il faut savoir que les extensions *.hh et *.cc ne sont rien d'autres que des extensions tout à fait classiques du C++, même si elles se sont en partie dépréciées au fil du temps au profit de *.hpp et *.cpp (tu as encore de la chance que, travaillant sous linux, il n'ont pas profité que le système est sensible à la casse pour utiliser les extensions *.H et *.C en majuscule )

    Les fichiers Makefile sont quant à eux, des fichiers d'automatisation de la compilation.

    Ce sont eux qui vont indiquer les options de compilation à passer, et d'une certaine manières les différentes dépendances entre les fichiers

    Il y a un tuto sur les Makefile "quelque part" sur ce forum, il serait peut etre pas mal d'aller y faire un tour, de cette manière, tu pourrais déjà commencer à comprendre ce qui est fait dans ces fichiers

    Pour le reste, tu peux aussi t'orienter vers Doxygen, qui permet d'avoir une vue d'ensemble du projet.

    Il permet, par exemple, d'avoir les relations qui existent entre les différentes classes, les dépendances entre les fichiers et même des diagrammes d'appel, de manière à pouvoir te faire une idée des appels faits par les différentes fonctions (ainsi que de ce par quoi elles sont appelées).

    Mais le meilleur moyen de "rentrer dans le code" est peut etre, tout simplement, de partir de la fonction main et des variables qu'elle utilise pour aller voir à quoi ressemblent les différentes classes et essayer (si elles ont été nommées un peu corectement) de déterminer leur responsabilités.

    Bon courage, je crois que tu en auras besoin
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    J'aime beaucoup BoUML pour faire du reverse engineering de code. Mais il faut savoir que :
    - A mon avis, UML ne représente pas correctement du code en C++ (en particulier les différentes relations entre classes, qui sont plus complexes en C++ que par exemple en Java ou C#)
    - Les outils UML que j'ai pu voir ne sont de toute manière pas très fins pour faire du retro engineering de C++ (par exemple, si A contient un std::vector<std::shared_ptr<B>>, dans l'idéal, on doit en déduire simplement une relation entre A et B, avec certaines décorations sur cette relation, mais rien qui concerne les classes vector ou shared_ptr. Ce n'est pas ce que j'ai vu jusqu'à présent.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  6. #6
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 194
    Par défaut
    Et bien merci de ces réponses. Je vais m'empresser de regarder une peu tout ça et voir ce qui ressort bien.
    J'avais commence effectivement a lire le tuto sur les makefile, afin de mieux comprendre.
    En tous cas j'ai au moins réussi a générer des classe avec VisualParadigm, je vais peut être les imprimer et reconstruire mon uml sur papier au fur et a mesure, je ne sais pas je vais voir. Je vais aussi (re)tester Doxygene, l'ayant déjà survole quand je faisais du Java.

    Merci a vous en tous cas !

  7. #7
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2011
    Messages : 54
    Par défaut
    A chaque fois que j'ai eu à me poser sur un gros projet déjà bien avancé, j'ai fait comme le préconise koala: plonger dans le code. Un gros bloc-note, et c'est parti pour lire les .h et .c! N'hésite pas à ajouter des commentaires pour comprendre petit bout par petit bout ce qu'il se passe, pourquoi s'est écrit, etc. Le bloc-note me servait surtout pour garder le fil conducteur dans la lecture du code, comme par exemple les liens fonctionnels entre les différentes classes genre celle-ci stocke des données, celle-ci affiche un truc à l'écran et est appelée par telle autre... Histoire d'avoir une vision globale du projet.
    Un autre point qui pourra grandement t'aider: te munir d'un IDE avec des fonctionnalités de navigation dans le code très simple. Travaillant sous Visual C++, l'add-on Visual Assist est d'une aide inestimable, et je sais que cette tache de découverte et déchiffrage du code serait beaucoup plus longue sans ça.



    My 2 cents.

Discussions similaires

  1. Comment protéger son code du reverse engineering ?
    Par progfou dans le forum Débats sur le développement - Le Best Of
    Réponses: 120
    Dernier message: 12/01/2011, 18h12
  2. Réponses: 0
    Dernier message: 04/04/2008, 17h14
  3. Reverse engineering (code Java) avec Bouml
    Par enirac dans le forum BOUML
    Réponses: 1
    Dernier message: 13/03/2008, 15h17
  4. Génération de code & reverse pour PHP
    Par bruno_pages dans le forum BOUML
    Réponses: 10
    Dernier message: 09/10/2007, 09h30
  5. Cherche brouilleur de code anti reversing-engening
    Par yo²man dans le forum VB.NET
    Réponses: 5
    Dernier message: 24/04/2007, 13h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo