Newsgroup: it.comp.programmare
Titolo: Decompilatore c++

Esistono strumenti che possano trasformare un eseguibile in sorgente per
questo linguaggio? Per il java mi pare che esistano.
Grazie

 per questo linguaggio? Per il java mi pare che esistano.
Esistevano vari "decompilatori", ma i risultati erano abbastanza...
deludenti... Il fatto e' che Java e' un "semicompilato", mentre C/C++
sono dei compilati *veri*, il che significa che l'80% delle
informazioni del sorgente sono perse... usa i motori di ricerca,
troverai sicuramente qualche cosa, ma aspettati il peggio.
Davide

troverai sicuramente qualche cosa, ma aspettati il peggio.
si dovrà aspettare il peggio, in circolazione esistono solo studi
su decompilatori C/C++, cmq ne esiste uno, che produce scarsi
risultati... lo dovrebbe produrre Texas Instrument, e non lo regala
affatto (lasciate stare i warez, lasciate stare qualsiasi cosa, non é
in circolazione, e chi lo possiede lo ha pagato caro... molto caro).
Comunque i risultati sono pessimi... dovrebbe esistere una
tesi di laurea di una ragazza, ma oltre a quello niente di
particolare, il resto utopia
cod

questo linguaggio? Per il java mi pare che esistano.
no. Il processo di decompilazione è tanto più difficile quanto più il
livello del linguaggio è alto. Si possono ottenere buoni risultati con
i disassemblatori, che trasformano il codice macchina in codice
assembler. Ad un livello più alto troviamo il C, ma già qui i
risultati dei decompilatori sono mediocri. Per il C++ è praticamente
impossibile scrivere un decompilatore.
Anto
--
Antonio Cuni, 19 anni, studente
Brainbench C++ Master: 4.6, higher than 98% of all previous test takers.
C Language: 3.32, higher than 79% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it

praticamente impossibile scrivere un decompilatore.
aggiungo che eventuali ottimizzazioni del compilatore rendono 
l'impossibile ancora più impossibile

l'impossibile ancora più impossibile
so di essere pignolo, però io la vedo in questo modo:
le ottimizzazioni del compilatore rendomo *molto molto difficile*
decompilare, ma non (almeno teoricamente) impossibile.
Per come è strutturato il C++ è invece impossibile nel vero senso
della parola: guarda i due codici qua sotto; non so se succede
veramente, ma potrebbero produrre lo *stesso* eseguibile:
// file1.cc
template<class T> void f(T) { }
int main() {
  f<int>(3);
  f<char>('a');
}
// file2.cc
void f_int(int) { }
void f_char(char) { }
int main() {
  f_int(3);
  f_char('a');
}
è evidente che il decompilatore non può essere in grado di risalire al
sorgente.


sorgente.
si effettivamente il compilatore produrrà più copie della funzione
template, quindi il decompilatore senza nessuna di queste informazioni
non sarebbe in grado di stabilire se f(int) ed f(char) facciano parte
di una sola funzione o siano 2 differenti, dato che nel compilato ne
risultano 2 differenti, con in comune il solo nome.....
ma non é detto in ogni caso, credo si possa produrre un decompilatore
*NON ECCELLENTE* basandosi su un solo compilatore, quindi capire
come traduce il codice macchina... ma qualcosa di universale é un
incubo... già IDA dovrebbe essere considerato il massimo nel settore,
mi sa che oltre é impossibile
cod