2013-03-03 132 views
8

我正在使用Ocaml,并且我需要弄清楚一些二进制文件。我最接近的是使用ocamlcc将OCaml字节码转换为C编译的代码。反编译OCaml字节代码文件

我不希望反向工程的C代码,除非和直到我肯定知道,我将无法编译OCaml的代码。

问:是否有任何传统的方式来反编译ML代码OCaml的具体?

(道歉,如果这个问题是抽象的。)

回答

6

您还可以使用dumpobjtools目录中的分布。它安装在名称ocamldumpobj下我的Ubuntu Linux操作系统,并将打印包含在一个字节码文件中的指令,在格式,如:

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

你必须了解OCaml的字节码走得更远。 没有工具可以从字节码转换为源文件,因为字节码不包含足够的信息。

4

你试过打印的字节码或拉姆达代码?您可以使用OCaml的-dlambda选项或-dinstr

还为二进制打印机一个非常好的项目:ocamlpp。也许你应该看看。

+0

我可能没有完全理解你,但我做了以下内容: - 'ocaml的-dlambda sm.byte' '文件 “sm.byte”,2号线,字符1-2:'' 错误:非法字符(\ 000)' 我猜想OCaml解释器由于非法校正器“\ 000”而无法进一步扫描代码。我只是做错了吗? – p0lAris 2013-03-05 00:02:07

+0

你尝试过'ocamlpp'会不会更有用? – cago 2013-03-05 10:52:52

+0

嗯,我确实尝试过ocamlpp,但它恐怕没有用处。 – p0lAris 2013-05-01 00:17:39