【发布时间】:2013-03-03 08:06:09
【问题描述】:
我正在研究 Ocaml,我需要弄清楚一些二进制文件。我最接近的是使用 ocamlcc 将 OCaml 字节代码转换为 C 编译代码。
我不希望对 C 代码进行逆向工程,除非并且直到我确定我将无法反编译 OCaml 代码。
问题:有没有什么传统方法可以专门为 OCaml 反编译 ML 代码?
(如果问题是抽象的,请道歉。)
【问题讨论】:
标签: ocaml decompiling
我正在研究 Ocaml,我需要弄清楚一些二进制文件。我最接近的是使用 ocamlcc 将 OCaml 字节代码转换为 C 编译代码。
我不希望对 C 代码进行逆向工程,除非并且直到我确定我将无法反编译 OCaml 代码。
问题:有没有什么传统方法可以专门为 OCaml 反编译 ML 代码?
(如果问题是抽象的,请道歉。)
【问题讨论】:
标签: ocaml decompiling
您还可以使用分发版的tools 目录中的dumpobj。它安装在我的 Ubuntu linux 上,名称为 ocamldumpobj,并将打印字节码文件中包含的指令,格式如下:
...
131214 APPLY1
131215 PUSHCONST1
131216 LTINT
131217 BRANCHIF 131225
131219 ACC2
131220 BRANCHIFNOT 131225
131222 ACC3
...
您必须了解 OCaml 字节码才能更进一步。 没有从字节码到源文件的工具,因为字节码没有包含足够的信息。
【讨论】:
您是否尝试过打印字节码或 lambda 码?您可以使用 OCaml 的-dlambda 选项或-dinstr。
还有一个非常好的二进制打印机项目:ocamlpp。也许你应该看看。
【讨论】:
Ocaml -dlambda sm.byte File "sm.byte", line 2, characters 1-2: Error: Illegal character (\000) 我猜,OCaml 解释器由于非法校正器而无法进一步扫描代码“\000”。我只是做错了吗?
ocamlpp 哪个(可能)更有用?