x64 vsco teléfono saber procesadores entre diferencia cómo como architecture x86 arm

architecture - vsco - diferencia entre procesadores arm y x86



Convertir la instrucción ARM a la instrucción i386 (7)

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


realmente lo dudo hay demasiadas diferencias para hacerlo automatizado.


Puede usar QEMU para emular las instrucciones ARM en x86.


http://www.libcpu.org/

Está muy en fase beta, pero la idea es escribir llvm front-ends para binarios, de modo que el back-end llvm pueda generar código para cualquier plataforma compatible. 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.


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

Debes ser más claro sobre lo que estás 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).


Podría aplicar ingeniería inversa al código ARM a C, y luego simplemente compilar el código C. Esta compañía 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).


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 de "bloques básicos", donde traduce todas las instrucciones hasta un punto de control (bifurcación, llamada, salto) y luego reemplaza el código en los destinos de bifurcación con stubs que vuelven a llamar al traductor. Es más o menos equivalente a algo así como "Compilación JIT" en el CLR, excepto que funciona en 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.

Sin embargo, la traducción dinámica de software 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.