2011-12-09 17 views
8

Tengo un compilador que compila un bytecode no documentado para una máquina virtual no documentada. Me gustaría poder compilar en la misma máquina virtual, pero no estoy seguro de cómo hacerlo. ¿Cómo aprendo a hacer esto? ¿Alguien ha publicado un registro o revista de ellos haciendo lo mismo?¿Cómo realizo la ingeniería inversa de un compilador?

EDIT: Me olvidé de mencionar que este es el RobotC 3.0 compiler para LEGO Mindstorms. Antes de que alguien sugiera algo más, sé todo sobre nXc y proyectos similares, y no son una opción ya que estoy ayudando a un equipo de robótica de FIRST FTC, que solo puede usar RobotC o LabView.

En cuanto a aquellos de ustedes que sugirieron que apunte al lenguaje del compilador, todavía no lo hago porque espero que ciertas características del hardware que no están expuestas por el compilador sean expuestas por el firmware , y porque quiero hacer más administración de memoria personalizada que la permitida por RobotC.

+3

Un compilador es un programa más y puede ser depurado como tal. – karlphillip

+3

Esto podría llevar meses. ¿Qué tal si tu compilador apunta al idioma de entrada del compilador que ya tienes? –

Respuesta

5

Mi inclinación sería desmontar el compilador. Si está escrito en .NET (C#, VB.NET, etc.) o Java, hay descompiladores que le darán algo muy muy cerca del código fuente original (a menos que esté ofuscado). Incluso si se trata de C++ y solo puede obtener ensamblaje, las llamadas a la biblioteca pueden indicarle la dirección correcta.

Si el código de bytes es pequeña, otra opción es comenzar con un programa "Hola mundo", compilar, hacer una pequeña cambia, compila eso, luego difiere los dos resultados de bytecode.

Si puede publicar más información sobre el compilador/VM específico, quizás otra persona tenga experiencia en eso.

Editar: Teniendo en cuenta que este es un producto comercial, es probable que la ingeniería inversa a través de la descompilación violará su contrato de licencia. RE'ing the bytecode podría no (no soy abogado). Aunque parece que estás en Catch-22. Si tiene éxito, no está utilizando RobotC o LabView. Si el concurso solo especifica que el código debe ejecutarse en la máquina virtual RobotC, podría ser factible. Recuerde, sin embargo, que una vez que RE el código de bytes, usted todavía tiene que escribir su propio compilador antes de que cualquiera pueda escribir cualquier software. Si estás haciendo esto por diversión, genial; de lo contrario, podría no ser factible.

Lo que encontrar un enlace interesante sobre la base de una Tesis de Maestría: Software Reverse Engineering

+0

Buen punto - Estoy siendo innecesariamente vago. Pregunta actualizada – Silas

+1

Sí, solo estamos obligados a usar el firmware (VM), no el compilador real. Soy una persona PL, por lo que los compiladores son como una segunda naturaleza para mí, siempre y cuando tenga algún tipo de especificación sobre el bytecode. – Silas

0

Parece que hay un montón de recursos que se puede ver en aquí:

http://en.wikipedia.org/wiki/Lego_Mindstorms_NXT_2.0

+0

No creo que entienda mi problema: ninguno de esos recursos se aplica puesto que RobotC usa firmware personalizado, y estoy limitado al uso de RobotC (en este caso, LabView no es una opción). – Silas

+0

Desafortunadamente, "RobotC ... requiere firmware personalizado para poder ejecutarse". Por cierto, gran sugerencia sobre la orientación del idioma de entrada: le sugiero que cambie ese comentario a su respuesta. Aunque eso no ayudará al PO, podría ayudar a otros en una situación similar. – TrueWill

Cuestiones relacionadas