2013-03-03 3 views
8

Ocaml에 대해 연구 중이고 알아야 할 바이너리가 있습니다. 가장 가까운 것은 ocamlcc을 사용하여 OCaml 바이트 코드를 C 컴파일 된 코드로 변환하는 것입니다.OCaml 바이트 코드 파일 디 컴파일하기

나는 OCaml 코드를 디 컴파일 할 수 없다는 것을 확신 할 때까지 C 코드를 리버스 엔지니어링하지 않기를 바란다.

질문 : OCaml 용 ML 코드를 구체적으로 디 컴파일하는 전통적인 방법이 있습니까?

(사과 문제는 추상적 인 경우.)

답변

6

tools 디렉토리의 dumpobj을 사용할 수도 있습니다. 그것은 이름 ocamldumpobj에서 내 우분투 리눅스에 설치되며, 같은 형식으로 바이트 코드 파일에 포함 된 지시 사항을 인쇄합니다 :

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

당신은 더 갈 OCaml의 바이트 코드에 대해 배울 수있다. 바이트 코드에는 충분한 정보가 들어 있지 않으므로 바이트 코드에서 소스 파일로 이동할 수있는 도구는 없습니다.

4

는 바이트 코드 또는 람다 코드를 인쇄하려고 있나요? -dlambda 옵션이나 OCaml의 -dinstr 옵션을 사용할 수 있습니다.

바이너리 프린터에는 매우 좋은 프로젝트 인 ocamlpp도 있습니다. 어쩌면 좀 봐봐.

+0

나는 당신을 완전히 이해하지 않을 수 있습니다,하지만 난 다음 한 : - 'OCaml의 -dlambda sm.byte' '파일 "sm.byte", 2 호선, 문자 1-2 :' '오류 : 불법 문자 (\ 000)' OCaml 인터프리터는 불법적 인 교정기 "\ 000"로 인해 코드를 더 이상 검사 할 수 없다고 생각합니다. 내가 잘못하고 있니? – p0lAris

+0

'(아마도) 더 유용 할'ocamlpp'을 시도 했습니까? – cago

+0

글쎄, 나는 ocamlpp를 시도했지만 유용하지 않다. 나는 두려워한다. – p0lAris