2009-03-12 9 views
6

Estoy buscando maneras/herramientas/proyectos para traducir el bytecode de Java en otros lenguajes de programación o, en su defecto, al menos en una representación estructurada (como XML). Idealmente, fuente abierta, naturalmente.Traduciendo Java bytecode en otras representaciones y lenguajes de programación

He visto ASM, el "marco de trabajo de manipulación y análisis de códigos de bytes". No es compatible con la traducción a otras representaciones, pero parece una buena base para tal proyecto. Lamentablemente, ninguno de los proyectos enumerados en su users page se acerca.

Respuesta

7

ASM tiene la api del árbol que básicamente puede darle la estructura completa del bytecode. Parece que es bastante fácil usar eso o incluso la API de visitante para imprimir eso en XML o en algún otro formato. No estoy seguro de qué uso es así.

Traducir de nuevo a Java es un trabajo de decompilador y otros como Jad do ok. Pero eso es difícil porque a) hay información perdida durante la fuente a la traducción de código de bytes yb) existe ambigüedad en que la fuente múltiple puede generar el mismo código de bytes.

Si realmente quiere pasar de un bytecode a otro lenguaje de alto nivel directamente, va a ser difícil hacerlo de manera exhaustiva y significativa, por todas las mismas razones la descompilación es difícil, excepto peor en otro idioma.

Si desea pasar de la fuente de Java a la fuente de otro idioma, esto ya se ha hecho antes, como en este Java-to-Python converter. Eso es algo más fácil ya que puedes convertir Java a un AST con algo como Antlr, o las herramientas incorporadas del compilador de Java, Project Jackpot, etc. Incluso entonces, supongo que no obtendrás un código muy idiomático en el idioma de destino.

1

Parece que está buscando un compilador cruzado. Conozco el proyecto xmlvm pero nunca lo he usado. Tal vez esto se adapte a tus necesidades.

1

Puede probar gcj para convertir el código de bytes en código nativo.

Si desea convertir a idiomas como python/groovy/ruby ​​quizás considere escribir en esos idiomas directamente en la JVM (me doy cuenta de que esto no es exactamente lo que está buscando).

Quizás buscar algunos ejemplos de algo como esto Eclipse Byte Code outline viewer.

Por último, la conversión de un lenguaje de bajo nivel (byte-code) a otro será bastante complicado y la corrección será un problema.

2

Pruebe BCEL (biblioteca de ingeniería de código de bytes). Puede implementar una interfaz de visitante, que puede usar para generar lo que quiera (código fuente en otro idioma, AST personalizado, xml, lo que sea).

Lo usé para un proyecto en la universidad donde (la mayoría) modifiqué un marco de análisis de programa que funcionaba sobre el código fuente de Java en uno que también podría funcionar contra el código de bytes de Java. Esa tarea implicó generar nodos para la representación AST interna del marco de análisis.

Además,

I desnatada brevemente la documentación para el proyecto "ASM" usted ha mencionado. Parece que define varias clases vistior. Debería poder usar esos para hacer lo que quiera también.

Si no está familiarizado con el patrón de visitante, consulte la descripción here. Además, si aún no lo ha leído, el libro "Gang of Four" es una buena lectura.

Cuestiones relacionadas