2010-05-28 8 views
6

¿Hay alguna instrucción ARM para el convertidor de instrucciones i386 disponible?Convertir la instrucción ARM a la instrucción i386

+9

¿Qué estás tratando de lograr? –

+0

¿Está intentando simplemente ejecutar algún código que tenga (en cuyo caso un emulador es bueno) o está tratando de convertir algún código que haya heredado de un desarrollador anterior y donde no haya obtenido el código fuente? –

+2

Si bien la conversión de instrucciones de ARM a x86 es técnicamente posible con un compilador personalizado (ARM a IR a x86), existen otros obstáculos más predominantes, como un sistema operativo completamente diferente y bibliotecas en tiempo de ejecución para las cuales la aplicación está diseñada comunicarse con lo que no tiene nada que ver con la conversión de instrucciones. Es más fácil recompilar la aplicación para el sistema operativo x86 y para el sistema operativo. – tgiphil

Respuesta

11

Puede usar QEMU para emular instrucciones de ARM en x86.

0

realmente dudo. hay demasiadas diferencias para hacerlo automatizado.

+1

Están mucho más cerca que, por ejemplo, ANSI C y x86, pero hay muchos programas que hacen esa conversión automáticamente. – Ken

+0

No, en absoluto. ANSI C está diseñado para compilar a varios lenguajes ensambladores. Muchos conceptos de alto nivel (relativamente) en C se pueden representar de diferentes maneras en diferentes ensambladores. Entre los ensambladores, sin embargo, es una historia diferente. – Puppy

0

http://www.libcpu.org/

Es en gran medida en beta, pero la idea es escribir llvm interfaces para binarios, por lo que el llvm back-end a continuación, puede generar código para cualquier plataforma soportada. Hay un front end ARMv6 en desarrollo activo, y estoy seguro de que les gustaría tener ayuda con él. El objetivo es admitir tanto la emulación como la recompilación estática entre cualquiera de las arquitecturas admitidas.

1

Puede realizar ingeniería inversa del código ARM en C, y luego simplemente compilar el código C. This company realmente produce código de código C bastante bueno del ensamblador. (Nunca he usado su producto, pero estoy familiarizado con la investigación detrás de esa compañía).

1

Emulación o traducción binaria estática son las rutas que tomaría, cada una tiene sus pros y sus contras.

Debe ser más claro acerca de lo que está preguntando. La simple traducción de un conjunto de instrucciones a otro es una cosa, la parte más difícil de hacer que el resultado sea útil es a lo que se dirige. La memoria y el espacio de registro de su ARM no coincidirán con el X86, por lo que una instrucción directa a la instrucción (emulada o sbt) no será suficiente, debe agregar código para reemplazar muchas de las cargas y las tiendas con algo que verifique la dirección, determine qué estaba dirigiendo y emulando ese periférico (emulado o sbt).

0

La forma más fácil de hacerlo es usar algo llamado "Software Dynamic Translation". Puede encontrar información sobre la técnica aquí:

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.120.5182&rep=rep1&type=pdf

Funciona mediante la traducción dinámica "bloques básicos", en el que traduce todas las instrucciones hasta un punto de control (rama, llamada, salto) y luego vuelva a colocar la codificar en los destinos de las ramas con talones que devuelven la llamada al traductor. Es más o menos equivalente a algo así como "compilación JIT" en el CLR, excepto que funciona a un nivel más granular (bloques básicos en lugar de métodos). Es ventajoso sobre los enfoques de traducción estáticos porque no se basa en un desmontaje preciso. No es posible adquirir un desmontaje perfecto (es equivalente al problema de detención). Incluso los desensambladores realmente buenos, como IDA pro, pueden tener problemas para identificar cosas como los manejadores de excepciones y, a menudo, confundir el código con los datos.

La traducción dinámica de software, sin embargo, no está sujeta a ninguna de estas limitaciones. Incluso puede (en teoría) manejar código de auto modificación usando técnicas de protección de memoria apropiadas.

Cuestiones relacionadas