我正在使用Ocaml,並且我需要弄清楚一些二進制文件。我最接近的是使用ocamlcc
將OCaml字節碼轉換爲C編譯的代碼。反編譯OCaml字節代碼文件
我不希望反向工程的C代碼,除非和直到我肯定知道,我將無法編譯OCaml的代碼。
問:是否有任何傳統的方式來反編譯ML代碼OCaml的具體?
(道歉,如果這個問題是抽象的。)
我正在使用Ocaml,並且我需要弄清楚一些二進制文件。我最接近的是使用ocamlcc
將OCaml字節碼轉換爲C編譯的代碼。反編譯OCaml字節代碼文件
我不希望反向工程的C代碼,除非和直到我肯定知道,我將無法編譯OCaml的代碼。
問:是否有任何傳統的方式來反編譯ML代碼OCaml的具體?
(道歉,如果這個問題是抽象的。)
您還可以使用dumpobj
從tools
目錄中的分佈。它安裝在名稱ocamldumpobj
下我的Ubuntu Linux操作系統,並將打印包含在一個字節碼文件中的指令,在格式,如:
...
131214 APPLY1
131215 PUSHCONST1
131216 LTINT
131217 BRANCHIF 131225
131219 ACC2
131220 BRANCHIFNOT 131225
131222 ACC3
...
你必須瞭解OCaml的字節碼走得更遠。 沒有工具可以從字節碼轉換爲源文件,因爲字節碼不包含足夠的信息。
你試過打印的字節碼或拉姆達代碼?您可以使用OCaml的-dlambda
選項或-dinstr
。
還爲二進制打印機一個非常好的項目:ocamlpp。也許你應該看看。
我可能沒有完全理解你,但我做了以下內容: - 'ocaml的-dlambda sm.byte' '文件 「sm.byte」,2號線,字符1-2:'' 錯誤:非法字符(\ 000)' 我猜想OCaml解釋器由於非法校正器「\ 000」而無法進一步掃描代碼。我只是做錯了嗎? – p0lAris 2013-03-05 00:02:07
你嘗試過'ocamlpp'會不會更有用? – cago 2013-03-05 10:52:52
嗯,我確實嘗試過ocamlpp,但它恐怕沒有用處。 – p0lAris 2013-05-01 00:17:39