Sfortunatamente ho perso il mio codice sorgente e ho solo il file di output creato con gcc in Linux e non ho alcun accesso al mio PC adesso. Esiste un modo per convertire il file di output in file sorgente (in c sotto Linux)?
Sfortunatamente ho perso il mio codice sorgente e ho solo il file di output creato con gcc in Linux e non ho alcun accesso al mio PC adesso. Esiste un modo per convertire il file di output in file sorgente (in c sotto Linux)?
Risposte:
Quindi avevi una mucca, ma l'hai inavvertitamente convertita in hamburger, e ora vuoi riprenderla.
Mi dispiace, non funziona così.
Ripristina semplicemente il file di origine dai tuoi backup.
Ah, non avevi i backup. Sfortunatamente, l'universo non ti dà una pausa per quello.
Puoi decompilare il file binario. Che non vi darà il codice sorgente, ma ti do un po 'di codice sorgente con lo stesso comportamento. Non otterrai i nomi delle variabili a meno che non fosse un binario di debug. Non otterrai la stessa identica logica se non hai compilato senza ottimizzazioni. Ovviamente, non riceverai commenti.
Ho usato Boomerang per decompilare alcuni programmi e il risultato è stato più leggibile del codice macchina. Non so se sia lo strumento migliore là fuori. Comunque, non aspettarti miracoli.
Diversi strumenti sono comuni nel reverse engineering di un eseguibile.
Nella maggior parte dei casi che ho visto, il codice doveva essere riscritto da zero, mantenuto come programma di linguaggio assembly o ricostituito applicando nuovamente le richieste di modifica a una versione precedente.
Quello che vuoi fare si chiama "decompilazione". Ci sono molti decompilatori là fuori e non è pratico coprirli tutti qui.
Tuttavia, come osservazione generale: la conversione dal codice sorgente C al codice macchina eseguibile è in perdita. Per esempio:
È raro che il codice sia compilato come scritto. La maggior parte dei compilatori in questi giorni cambierà drasticamente il codice per ottimizzarlo. Quindi quando si decompila, il compilatore può solo indovinare come deve essere stato il codice sorgente, non ha modo di sapere quale fosse il tuo codice, perché non c'è più. Se il decompilatore è valido, il codice che otterrai sarà almeno compilabile in un eseguibile equivalente, quindi puoi iniziare lentamente a riformattarlo in modo che sia leggibile. Ma molto probabilmente il decompilatore produrrà un codice spaghetti assolutamente illeggibile e sarà un grosso mal di testa decifrarlo. A volte, potrebbe essere meno lavoro per riscrivere il programma da zero.