2013-03-03 18 views
8

Sto lavorando su Ocaml e ho alcuni binari che ho bisogno di capire. Il più vicino a cui sono arrivato è la conversione del codice byte OCaml in codice C compilato usando ocamlcc.Decompilare i file di codice byte OCaml

Non voglio decodificare il codice C a meno che e fino a quando non sia sicuro che non sarà in grado di decompilare il codice OCaml.

Domanda: Esistono metodi tradizionali per decompilare in modo specifico il codice ML per OCaml?

(Mi scuso se la questione è astratta.)

risposta

6

È inoltre possibile utilizzare dumpobj dalla directory tools della distribuzione. È installato sul mio linux Ubuntu sotto il nome ocamldumpobj, e stamperà le istruzioni contenute in un file bytecode, in un formato simile:

... 
131214 APPLY1 
131215 PUSHCONST1 
131216 LTINT 
131217 BRANCHIF 131225 
131219 ACC2 
131220 BRANCHIFNOT 131225 
131222 ACC3 
... 

Devi conoscere OCaml bytecode di andare oltre. Non esiste uno strumento per passare dal bytecode ai file sorgente, in quanto il bytecode non contiene informazioni sufficienti per quello.

4

hai provato a stampare il bytecode o il codice lambda? È possibile utilizzare l'opzione -dlambda o -dinstr di OCaml.

C'è anche un ottimo progetto per la stampante binaria: ocamlpp. Forse dovresti dare un'occhiata.

+0

Forse non ho capito voi completamente, ma ho fatto quanto segue: - 'O'Caml -dlambda sm.byte' ' File "sm.byte", linea 2, caratteri 1-2: '' errore : Carattere non valido (\ 000) ' Suppongo che l'interprete OCaml non sia in grado di eseguire la scansione del codice ulteriormente a causa di un correttore illegale" \ 000 ". Sto sbagliando tutto? – p0lAris

+0

Hai provato 'ocamlpp' che sarà (forse) più utile? – cago

+0

Beh, ho provato ocamlpp ma non mi è servito affatto. – p0lAris

Problemi correlati