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.