Esiste un decompilatore C ++? [chiuso]


116

Ho un programma in cui ho perso il codice sorgente C ++. Ci sono dei buoni decompilatori C ++ là fuori?

Ho già incontrato Boomerang .


objdumpper Linux
— Stypox

1
cutter.re per un'ottima interfaccia grafica e un ottimo decompilatore
— integrato

Risposte:


80

Puoi usare IDA Pro di Hex-Rays . Di solito non otterrai un buon C ++ da un binario a meno che tu non abbia compilato le informazioni di debug. Preparati a spendere molto lavoro manuale per invertire il codice.

Se non hai rimosso i binari, c'è qualche speranza in quanto IDA Pro può produrre codice C-alike con cui lavorare. Di solito è molto ruvido, almeno quando l'ho usato un paio di anni fa.


26
Per chiarire, IDA darà solo lo smontaggio. C'è un add-on chiamato Hex-Rays che decompilerà il resto del percorso nel sorgente C / C ++, per quanto possibile.
— davenpcj

2
Per la mia lettura dei documenti, hex-ray emette solo C come pseudo-codice. Non che ciò renda inutile decompilare C ++, devi solo sapere un po 'su come i compilatori convertono le strutture C ++.
— Michael Anderson

Per chiarire ancora, il disassemblaggio è il massimo che puoi decompilare con Hex-Rays tradurrà ASM in C ++ ASM può essere tradotto in qualsiasi linguaggio di programmazione con il lavoro poiché tutti i programmi possono essere eseguiti come ASM
— Barkermn01

4
SNOWMAN è un buon decompilatore c ++ gratuito
— Inga

2
+1 per Snowman, ma come altri hanno già detto, anche un semplice Hello, World diventa praticamente illeggibile una volta decompilato.
— bdetweiler

25

le informazioni vengono scartate durante il processo di compilazione. Anche se un decompilatore potesse produrre il codice logico equivalente con classi e tutto (probabilmente non può), la parte di auto-documentazione è andata in codice di rilascio ottimizzato. Nessun nome di variabile, nessun nome di routine, nessun nome di classe - solo indirizzi.


25
"l'anima" del programma è sparita, solo un guscio vuoto del suo precedente sé ... "
— Darshan Chaudhary

21

Sì, ma nessuno di loro riuscirà a produrre un codice abbastanza leggibile da valerne la pena. Passerai più tempo a cercare di leggere il sorgente decompilato con i blocchi assembler all'interno, piuttosto che a riscrivere la tua vecchia app da zero.


6

Non ho visto alcun decompilatore che generi codice C ++. Ne ho visti alcuni sperimentali che fanno un ragionevole tentativo di generare codice C, ma tendevano a dipendere dalla corrispondenza dei modelli di generazione del codice di un particolare compilatore (che potrebbe essere cambiato, è passato un po 'di tempo dall'ultima volta che l'ho esaminato ). Ovviamente qualsiasi informazione simbolica sparirà. Google per "decompilatore".


4

A seconda di quanto fosse grande e ben scritto il codice originale, potrebbe valere la pena ricominciare dalla tua lingua preferita (che potrebbe essere ancora C ++) e imparare dagli errori commessi nell'ultima versione. Qualcuno una volta non ha detto di scriverne uno da buttare?

nb Chiaramente se questo è un prodotto enorme, potrebbe non valerne la pena.



24
Joel è un ottimo editorialista, ma a volte sbaglia. E poi ci sono momenti in cui viene citato in modo sbagliato. Come qui, poiché la domanda è incentrata sulla perdita del codice sorgente. L'articolo di Joels spiega perché il codice sorgente è prezioso.
— MSalters

5
Qualcuno una volta non ha detto di scriverne uno da buttare via? Sì, e ha cambiato idea davewsmith.com/blog/2010/brook-revisits-plan-to-throw-one-away [Nel] 1975, ho consigliato ai programmatori di "buttare via la prima versione", quindi crearne una seconda uno. Con l'edizione del 20 ° anniversario, mi sono reso conto che l'iterazione incrementale costante è un approccio molto più
— solido
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.