J'ai un programme dans lequel j'ai perdu le code source C ++. Existe-t-il de bons décompilateurs C ++?
J'ai déjà rencontré Boomerang .
J'ai un programme dans lequel j'ai perdu le code source C ++. Existe-t-il de bons décompilateurs C ++?
J'ai déjà rencontré Boomerang .
Réponses:
Vous pouvez utiliser IDA Pro par Hex-Rays . Vous n'obtiendrez généralement pas un bon C ++ d'un binaire à moins d'avoir compilé dans les informations de débogage. Préparez-vous à passer beaucoup de travail manuel à inverser le code.
Si vous n'avez pas supprimé les binaires, il y a de l'espoir car IDA Pro peut produire du code C-alike avec lequel vous pourrez travailler. Habituellement, c'est très difficile, du moins quand je l'ai utilisé il y a quelques années.
les informations sont supprimées lors du processus de compilation. Même si un décompilateur pouvait produire le code logique équivalent avec des classes et tout (il ne peut probablement pas), la partie auto-documentée a disparu dans le code de version optimisé. Pas de nom de variable, pas de nom de routine, pas de nom de classe - juste des adresses.
Oui, mais aucun d'entre eux ne parviendra à produire un code suffisamment lisible pour en valoir la peine. Vous passerez plus de temps à essayer de lire la source décompilée avec des blocs assembleurs à l'intérieur, qu'à réécrire votre ancienne application à partir de zéro.
Je n'ai vu aucun décompilateur qui génère du code C ++. J'en ai vu quelques-uns expérimentaux qui tentent raisonnablement de générer du code C, mais ils avaient tendance à dépendre de la correspondance avec les modèles de génération de code d'un compilateur particulier (cela peut avoir changé, cela fait un moment que je n'ai pas regardé cela pour la dernière fois. ). Bien sûr, toute information symbolique aura disparu. Google pour "décompilateur".
En fonction de la taille et de la qualité du code d'origine, il peut être utile de recommencer dans votre langage préféré (qui peut encore être C ++) et d'apprendre de toutes les erreurs commises dans la dernière version. Est-ce que quelqu'un n'a pas dit une fois d'en écrire un à jeter?
nb Clairement s'il s'agit d'un produit énorme, alors cela ne vaut peut-être pas la peine.
objdump
pour Linux