Existe-t-il un décompilateur C ++? [fermé]

116

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 .

Bryan Denny
la source
objdumppour Linux
Stypox
1
cutter.re pour une grande interface graphique et un excellent décompilateur
intégré

Réponses:

80

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.

David Holm
la source
27
Pour clarifier, IDA ne donnera que le démontage. Il y a un add-on appelé Hex-Rays qui décompilera le reste du chemin en source C / C ++, dans la mesure du possible.
davenpcj
2
À ma lecture de la documentation, les rayons hexadécimaux ne produisent que du C comme un pseudo-code. Non pas que cela le rende inutile pour décompiler C ++, vous avez juste besoin de savoir un peu comment les compilateurs convertissent les structures C ++.
Michael Anderson
Pour clarifier un peu plus, le désassemblage est le plus que vous pouvez décompiler avec Hex-Rays traduira ASM en C ++ ASM peut être traduit dans n'importe quel langage de programmation avec travail car tous les programmes peuvent fonctionner en ASM
Barkermn01
4
SNOWMAN est un bon décompilateur C ++ gratuit
Inga
2
+1 pour Snowman, mais comme d'autres l'ont mentionné, même un simple Hello, World devient pratiquement illisible une fois décompilé.
bdetweiler
25

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.

Dustin Getz
la source
25
"l'âme" du programme est partie, juste une coquille vide de son ancien moi ... "
Darshan Chaudhary
21

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.

m_pGladiator
la source
6

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".

Ferruccio
la source
4

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.

harriyott
la source
24
Joel est un grand chroniqueur, mais parfois faux. Et puis il y a des moments où il est mal cité. Comme ici, puisque la question est centrée sur la perte de code source. L'article de Joels explique pourquoi le code source est précieux.
MSalters
5
Est-ce que quelqu'un n'a pas dit une fois d'en écrire un à jeter? Oui, et il a changé d'avis davewsmith.com/blog/2010/brook-revisits-plan-to-throw-one-away [I] n 1975, j'ai conseillé aux programmeurs de «jeter la première version», puis d'en construire une seconde une.
Lors de l'