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++

  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 : 37
    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
    734
    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 : 734
    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 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 636
    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.

  8. #8
    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
    Une autre technique qui marche avec moi pour entrer dans du code que je ne connais pas est d'y aller avec un débogueur.

    Tout d’abord, j'utilise normalement le produit, afin d'apprendre ce qu'il fait avant de tenter de comprendre comment il le fait. Puis j'y vais en pas à pas, à plus ou moins gros grains selon l'endroit où je me trouve. J'arrive ainsi souvent à commencer à ma former une image mentale de l'architecture du code.
    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.

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    En général, je pars du main, parcours le code, et sur papier, fais en général deux choses :

    - construction d'un diagramme de classe simplifié, sans me soucier de l'exhaustivité quant à leurs membres

    - construction du diagramme de séquence simplifié

  10. #10
    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
    Re-bonjour

    Alors j'ai passe une partie de ma journée sur ce fichu diagramme et sur VisualParadigm.
    Et en fait il marche plutôt pas mal. Il galère un peu parfois a générer certain *.h, mais on peut les re-générer. Même si ce n'est pas au top top niveau formalisme UML, ça permet d'avoir toutes les boites, méthodes et attributs. Reste plus qu'a se munir d'un crayon et d'une feuille et a recoller les morceaux

  11. #11
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Sinon, il existe un programme nommé autodia qui traduit du code en fichier .dia, utilisable dans le programme dia, éditeur de diagramme de classe.

    Tous deux sont des logiciels libres, disponibles (au moins) pour linux.

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