2009-03-12 2 views
6

Java 바이트 코드를 다른 프로그래밍 언어로 변환하거나 적어도 XML과 같은 구조화 된 표현으로 변환하는 방법/도구/프로젝트를 찾고 있습니다. 이상적으로 오픈 소스, 자연스럽게.Java 바이트 코드를 다른 표현 및 프로그래밍 언어로 번역

"바이트 코드 조작 및 분석 프레임 워크"인 ASM을 보았습니다. 다른 표현에 대한 번역은 지원하지 않지만 그러한 프로젝트의 좋은 토대처럼 보입니다. 슬프게도, users page에 나열된 프로젝트 중 어느 것도 닫히지 않습니다.

답변

7

ASM에는 기본적으로 바이트 코드의 전체 구조를 제공 할 수있는 트리 API가 있습니다. XML 또는 다른 형식으로 인쇄하기 위해 방문자 API를 사용하는 것이 꽤 쉽습니다. 그게 무슨 용도인지는 모르겠다.

자바로 변환하는 것은 디 컴파일러의 작업이며 Jad는 괜찮습니다. 그러나 a) 바이트 코드 변환 소스에서 정보가 손실되고 b) 여러 소스가 동일한 바이트 코드를 생성 할 수 있다는 모호성이 있기 때문에 어렵습니다.

실제로 바이트 코드에서 다른 고수준 언어로 직접 가고 싶다면, 디 컴파일은 다른 언어로 악화되는 것을 제외하고는 어렵 기 때문에 동일한 이유 때문에 포괄적이고 의미있게 수행하기가 어려울 것입니다.

Java 소스에서 다른 언어 소스로 이동하려면이 코드는 Java-to-Python converter처럼 이전에 완료되었습니다. Antlr이나 내장 Java 컴파일러 도구 인 Project Jackpot 등을 사용하여 Java를 AST로 변환 할 수 있기 때문에 다소 쉽습니다. 그럼에도 불구하고 대상 언어에서 매우 관용적 인 코드를 얻지 못할 것이라고 생각합니다.

1

크로스 컴파일러를 찾는 것처럼 보입니다. 프로젝트 xmlvm을 알고 있지만 사용 해보지 않았습니다. 아마도 이것은 귀하의 필요에 어울립니다.

1

gcj을 사용해 바이트 코드를 원시 코드로 변환 할 수 있습니다.

python/groovy/ruby와 같은 언어로 변환하려는 경우 (아마도이 ​​언어가 이 아니란 점을 알고 있습니다. 정확히).

아마 Eclipse Byte Code outline viewer과 같은 것으로부터 몇 가지 예제를 제거하십시오.

마지막으로 하나의 저수준 언어 (바이트 코드)에서 다른 언어로 변환하는 것은 매우 까다롭고 정확성이 문제가 될 것입니다.

2

시도해보십시오. BCEL (바이트 코드 엔지니어링 라이브러리). Visitor 인터페이스를 구현하여 원하는 것을 생성 할 수 있습니다 (다른 언어의 소스 코드, AST, xml 등).

저는 자바 소스 코드에서 Java 바이트 코드와도 작동 할 수있는 프로그램 분석 프레임 워크를 수정 한 대학의 프로젝트에서 사용했습니다. 이 작업은 분석 프레임 워크의 내부 AST 표현을위한 노드를 생성하는 것과 관련이 있습니다. 또한

,

내가 잠시 당신이 언급 한 "ASM"프로젝트에 대한 문서를 미끄러 져. 그것은 몇 가지 vistior 클래스를 정의하는 것처럼 보입니다. 당신은 그것들을 사용하여 당신이 원하는 것을 할 수 있어야합니다.

방문자 패턴에 익숙하지 않은 경우 here 설명을 확인하십시오. 또한 아직 읽지 않은 경우 "Gang of Four"책을 읽는 것이 좋습니다.

관련 문제