2013-03-03 21 views
8

Tôi đang làm việc trên Ocaml và tôi có một số tệp nhị phân mà tôi cần tìm ra. Gần nhất tôi đã đến là chuyển đổi mã byte OCaml sang C biên dịch mã bằng cách sử dụng ocamlcc.Biên dịch lại các tệp mã byte OCaml

Tôi không muốn đảo ngược thiết kế mã C trừ khi và cho đến khi tôi biết chắc chắn rằng tôi sẽ không thể giải mã mã OCaml.

Câu hỏi: Có cách nào truyền thống để giải mã mã ML cho OCaml một cách cụ thể không?

(Xin lỗi nếu câu hỏi là trừu tượng.)

Trả lời

6

Bạn cũng có thể sử dụng dumpobj từ thư mục tools của bản phân phối. Nó được cài đặt trên Linux Ubuntu của tôi dưới cái tên ocamldumpobj, và sẽ in các hướng dẫn chứa trong một tập tin bytecode, trong một định dạng như:

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

Bạn cần phải tìm hiểu về OCaml bytecode đi xa hơn. Không có công cụ nào để chuyển từ mã byte sang tệp nguồn, vì mã byte không chứa đủ thông tin cho điều đó.

4

Bạn đã cố in mã byte hoặc mã lambda chưa? Bạn có thể sử dụng tùy chọn -dlambda hoặc -dinstr của OCaml.

Ngoài ra còn có một dự án thực sự tốt cho máy in nhị phân: ocamlpp. Có lẽ bạn nên xem.

+0

Tôi có thể không hiểu bạn hoàn toàn, nhưng tôi đã làm như sau: - 'Ocaml -dlambda sm.byte' ' File "sm.byte", dòng 2, nhân vật 1-2: ' 'Lỗi : Ký tự không hợp lệ (\ 000) ' Tôi đoán, trình thông dịch OCaml không thể quét mã thêm do bộ sửa lỗi bất hợp pháp" \ 000 ". Tôi chỉ làm tất cả sai? – p0lAris

+0

Bạn đã thử 'ocamlpp' mà sẽ (có thể) hữu ích hơn? – cago

+0

Vâng, tôi đã thử ocamlpp nhưng nó không hữu ích chút nào tôi sợ. – p0lAris