Pregunta

Estoy buscando formas / herramientas / proyectos para traducir el código de bytes de Java a otros lenguajes de programación o, en su defecto, al menos en una representación estructurada (como XML). Idealmente de código abierto, naturalmente.

He examinado ASM , el marco de manipulación y análisis de bytecode " ;. No admite la traducción a otras representaciones, pero parece una buena base para tal proyecto. Lamentablemente, ninguno de los proyectos enumerados en su página de usuarios se cierra.

¿Fue útil?

Solución

ASM tiene la API del árbol que básicamente puede darle la estructura completa del código de bytes. Parece que es bastante fácil usar eso o incluso la API del visitante para imprimirlo en XML u otro formato. Sin embargo, no estoy seguro de qué uso es.

Volver a traducir a Java es el trabajo de un descompilador y otros como Jad lo hacen bien. Pero eso es difícil porque a) hay información perdida durante la fuente para la traducción de bytecode yb) hay ambigüedad en que la fuente múltiple puede producir el mismo código de byte.

Si realmente desea pasar de bytecode a otro lenguaje de alto nivel directamente, será difícil hacerlo de manera integral y significativa, por las mismas razones que descompilar es difícil, excepto peor en otro idioma.

Si desea pasar de la fuente Java a la fuente de otro idioma, esto se ha hecho antes, como en este Convertidor de Java a Python . Eso es algo más fácil, ya que puede convertir Java en un AST con algo como Antlr , o las herramientas integradas de compilación de Java, Project Jackpot , etc. Aun así, supongo que no obtendrá un código muy idiomático en el idioma de destino.

Otros consejos

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, un AST personalizado, xml, lo que sea).

Lo utilicé para un proyecto en la universidad donde modifiqué (principalmente) un marco de análisis de programas 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,

Hojeé brevemente la documentación para el " ASM " proyecto que mencionaste. Parece que define varias clases vistior. Debería poder usarlos para hacer lo que quiera también.

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

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

Puede intentar 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 busque algunos ejemplos de algo como esto Eclipse Byte Code viewer .

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top