Italian community of Lazarus and Free Pascal
Programmazione => Generale => Topic aperto da: Narciso - Dicembre 10, 2016, 11:26:20 pm
-
Esiste un decompilatore che riesca a restituire le procedure in pascal e non in linguaggio macchina?
Ho provato dede... ma ha il difetto in questione.
-
Che io sappia i decompilatori restituiscono solo assembler.In quanto si tratta di deassemblare un qualcosa in formato macchina!
-
Io non l'ho mai trovato un decompilatore. Lo cercavo per Basic o Pascal, ma non trovai nulla.
L' Assembler è dal '89 che non lo uso, programmavamo lo Z80.
-
Narciso.
Piccolo inciso.
Il decompilatore cerca di indoviare cosa ha letto il compilatore prima di scrivere il codice.
Nel caso di linguaggi interpretati (esempio java), dentro il binario ci sono molte informazioni che non riguardando l'esecuzione come algoritmo vero e proprio.
Nel caso di java, ci sono tante informazion che il decompilatore usa per indovinare il codice che ha compilato il compilatore (che bisticcio di parole :( )
Nel caso di compilatori nativi, queste "meta informazioni" sono ridotte a informazioni di debug e simboli condivisi (esempio il nome di una funzione esportata da una dll). Quello che trovi sono disassemblatori più decompilatori. Questi sono abbastanza semplici di scrivere, conoscendo l'achitettura target dell'assemblatore di partenza.
Per intuire le funzioni cerchi i call e i return.
Se non hai informazioni di debug/simboli a cui aggrapparti non puoi associare ad un indirizzo in memoria un'etichetta. Quello che puo far vedere è un indirizzo di memoria.
Poi nemmeno nelle info di debug esiste uno std affermato.
Altra storia per i linguaggi interpretati.
Se decompili una classe java (ad esempio) scritta in freepascal, 9 su 10 otterrai codice java (sempre che riesca ad indovinare il codice si intende).
Poi si può sempre scrivere un decompilatore che parta dai .class e faccia vedere .pas .. ma non mi risulta essercene in circolazione al momento.
Basic, volendo (supercim), poteva essere decompilato se era tipo gvbasic o simili. Di fatto non eramo mai veramente compilati. Avevano un interprete che spingeva il codice.
Stilgar
-
Nel '86 programmavo in Qbasic a scuola e in basic 7.0 a casa per il commodore 128. Ma non trovai decompilatori per poter modificare alcuni eseguibili, quindi dovevo ricrearmeli in basic.
-
hihi, Supercim, ora potresti scrivere un decompilatore :)
-
Eh si! Potrei provare a crearlo con Lazarus! Potrei provare a creare piccoli eseguibili, leggermi il codice e poi far leggere il codice ad un programmino realizzato in Lazarus e in base al codice deve ricrearmi il progetto, come lo avevo creato io prima.