Ho un programma in cui ho perso il codice sorgente C ++. Ci sono dei buoni decompilatori C ++ là fuori?
Ho già incontrato Boomerang .
Ho un programma in cui ho perso il codice sorgente C ++. Ci sono dei buoni decompilatori C ++ là fuori?
Ho già incontrato Boomerang .
Risposte:
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.
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.
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.
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".
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.
objdump
per Linux