2013-03-03 10 views
8

Ich arbeite an Ocaml und ich habe einige Binärdateien, die ich herausfinden muss. Der nächste, den ich kenne, ist die Konvertierung von OCaml-Bytecode in C-kompilierten Code unter Verwendung von ocamlcc.Decompiling OCaml Byte-Code-Dateien

Ich möchte den C-Code nicht zurückentwickeln, außer und bis ich sicher bin, dass ich OCAML-Code nicht dekompilieren kann.

Frage: Gibt es irgendwelche traditionellen Möglichkeiten, ML-Code speziell für OCaml zu dekompilieren?

(Entschuldigt, wenn die Frage abstrakt ist.)

Antwort

6

Sie können auch dumpobj aus dem Verzeichnis tools der Distribution verwenden. Es ist auf meinem Ubuntu Linux unter dem Namen in einer Bytecode-Datei enthalten ocamldumpobj, und druckt die Anweisungen installiert ist, in einem Format wie:

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

Sie haben über OCaml Bytecode zu lernen, weiter zu gehen. Es gibt kein Werkzeug, um von Bytecode zu Quelldateien zu gehen, da der Bytecode nicht genügend Informationen dafür enthält.

4

Haben Sie den Bytecode oder den Lambda-Code zu drucken versucht? Sie können die -dlambda Option oder -dinstr von OCaml verwenden.

Es gibt auch ein wirklich gutes Projekt für den binären Drucker: ocamlpp. Vielleicht solltest du einen Blick darauf werfen.

+0

Ich kann nicht vollständig verstanden haben Sie, aber ich habe folgendes: - 'Ocaml -dlambda sm.byte' ' File "sm.byte", Zeile 2, Zeichen 1-2: '' Fehler : Ungültiges Zeichen (\ 000) ' Ich vermute, der OCaml-Interpreter kann den Code aufgrund eines unzulässigen Korrektors" \ 000 "nicht weiter scannen. Mache ich einfach alles falsch? – p0lAris

+0

Haben Sie 'ocamlpp' versucht, was (vielleicht) nützlicher sein wird? – cago

+0

Nun, ich habe versucht, ocamlpp, aber es war überhaupt nicht nützlich, ich habe Angst. – p0lAris