Il mio prof di informatica ha detto che esistono dei decompilatori per c/c++...
A me sembra strano ma lui sicuramente ne sa piu' di me sull'argomento...
Mi chiarite un po' le idee?
Il mio prof di informatica ha detto che esistono dei decompilatori per c/c++...
A me sembra strano ma lui sicuramente ne sa piu' di me sull'argomento...
Mi chiarite un po' le idee?
Mai incontrato un decompilatore che riuscisse a decompilare qualcosa di più complesso di un Hello World, magari neanche quello se il programma ha attive un po' di ottimizzazioni.
Amaro C++, il gusto pieno dell'undefined behavior.
L'argomento decompilazione è sempre ad alto rischio su questo forum, in quanto sono problematiche che possono sempre essere sfruttate per utilizzi non del tutto legali, come il "reverse engineering" di applicazioni commerciali.Originariamente inviato da Neon87
Il mio prof di informatica ha detto che esistono dei decompilatori per c/c++...
MARCO BREVEGLIERI
Software and Web Developer, Teacher and Consultant
Home | Blog | Delphi Podcast | Twitch | Altro...
Le possibilità sono due: o il prof. non capisce una 'h' oppure si è confuso e voleva dire "disassemblatore".Originariamente inviato da Neon87
Il mio prof di informatica ha detto che esistono dei decompilatori per c/c++...![]()
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Quindi niente files di intestazione...Originariamente inviato da andbin
Le possibilità sono due: o il prof. non capisce una 'h'![]()
Amaro C++, il gusto pieno dell'undefined behavior.
Non liquiderei la faccenda in questi termini anche se la decompilazione è una branca dell'informatica poco conosciuta . L'idea alla base di un decompilatore è che ogni particolare compilatore produce , per ogni istruzione , una particolare sequenza di codice oggetto . Quindi il decompilatore si fa carico di tradurre il "particolare" codice oggetto nel corrispondente codice sorgente . Avremo quindi decompilatori specifici per ogni particolare compilatore . Per maggiori informazioni visita il seguente sito .Originariamente inviato da andbin
Le possibilità sono due: o il prof. non capisce una 'h' oppure si è confuso e voleva dire "disassemblatore".![]()
Saluti![]()
grazie mille delle risposte!
sono sicuro che abbia detto decompilatore perche' quando l'ha detto gliel'ho chiesto nuovamente per sicurezza perche' mi sembrava strano...
boh probabilmente era una giornata storta perche' ha fatto un gran casino a spiegare cin cout e roba varia...
vi faccio sapere cosa dice lunedi![]()
grazie ancora!
Ho provato un casino di decompilatori (a puro scopo didattico !?)...
...Non funziona neanche per il più semplice prog in dos.
In realtà decompilare non è semplice come sembra: per passare da un'eseguibile al sorgente ci possono essere molte ambiguità.
Diverso è disassemblare (sebbene i termini siano in parte sinonimi).
Experience is what you get when you don’t get what you want
E' pure vero che invece esistono ottimi disassemblatori, in grado di ricostruire la suddivisione del codice in procedure, con tanto di parametri (spesso di tipo C, come, che ne so, HWND o tagRECT) e variabili locali.Originariamente inviato da Xaratroom
Ho provato un casino di decompilatori (a puro scopo didattico !?)...
...Non funziona neanche per il più semplice prog in dos.
In realtà decompilare non è semplice come sembra: per passare da un'eseguibile al sorgente ci possono essere molte ambiguità.
Diverso è disassemblare (sebbene i termini siano in parte sinonimi).
Con un pochino di lavoro e di conoscenza di Assembly, quindi, basta un buon disassemblatore per ottenere codice quasi decompilato.
In fin dei conti, "MOV a, b" corrisponde a un'assegnazione "a = b", così come "LEA a, b" corrisponde a "a = &b"... e così via.
Ovviamente vanno risolti problemini non da poco, come il fatto che nel codice C non si vedono i registri, lo stack non esiste e lo stack pointer nemmeno... ed è per questo che decompilare è una vera sfida.
Che comunque, un po' come l'energia atomica, non è di per sè pericolosa, ma potrebbero esserlo certi usi che se ne fanno. Una centrale nucleare ben fatta e ben mantenuta può solo fare del bene, così come recuperare il codice sorgente di un nostro vecchio programma potrebbe tornarci utile... soprattutto se il disco in cui l'avevi salvato ti lascia...
Svegliati, Neo. Matrix ti possiede...
Mai due variabili in un'istruzione assembly, quindi:
a = b
mov <registro>,b
mov a,<registro>
ma non puoi usare un registro a caso perchè potrebbe già essere usato
quindi l'istruzione potrebbe essere arriccchita da una push e una pop
E, se tradurre da assembly a c un'istruzione così semplice può essere un po' elaborato
(perchè non è così semplice far capire al pc cosa deve fare in un caso simile) immagina un'istruzione come assegnare ad una variabile un'espressione...
...poi basta ricordare tutte le regole di scope e lifetime che hanno le variabili, cosa che in assembly non esiste, o "gli innumerevoli" tipi di dato
inoltre non vi sono nomi o etichette di salto in un decompilato, ma i relativi "indirizzi"(se così li possiamo chiamare), quindi si deve specificare un nome, se non appropriato, almeno leggibile dal programmatore (trovare in un codice variabili con nomi del tipo: a,b,c,d,e...,a1,a2,a3,a4)
Naturalmente non è impossibile ma "è improbabile"....
Experience is what you get when you don’t get what you want