2012-01-26 12 views
7

Necesito convertir el código fuente del ensamblaje x86 al archivo .ll de LLVM legible por el ser humano (también conocido como lenguaje ensamblador LLVM). ¿Cómo puedo hacer esto? Si no hay una solución directa, ¿sería posible implementar una dentro de la infraestructura de LLVM con el menor esfuerzo posible?Compilación de fuente a fuente con LLVM

Supongo que la solución que estoy buscando debería ser algún tipo de contraparte de llc que convierta el archivo .s a .ll.

+3

Esta pregunta ya fue hecha y respondida. No hay una solución directa debido a muchas cosas (por ejemplo, ramas indirectas). Puede encontrar el proyecto como llvm-qemu y libcpu útil para usted. En cualquier caso, esta pregunta es un duplicado de http://stackoverflow.com/questions/6981810/translation-of-machinecode-into-llvm-ir-disassembly-reassembly-of-x86-64-x86 –

+1

Gracias. Ya he echado un vistazo a los proyectos que mencionaste. Desafortunadamente, _llvm-qemu_ parece muerto. Y _libcpu_ parece que va por su propio camino en el análisis de ensamblaje en lugar de usar la infraestructura de LLVM (por lo que parece estar incompleto al admitir x86 ISA). De hecho, pensé que la herramienta que estaba buscando debería hacer el trabajo de ** AsmPrinter ** de LLVM, pero a la inversa, traducir las instrucciones ISA nativas en _MachineInstr_ de LLVM o _MCInst de LLVM-MC. – bsa2000

+0

¿Y el subproyecto de LLVM ** llvm-mc **? Tiene la clase _AsmParser_ que puede comer el archivo .s y generar su representación basada en la clase _MCInst_. En este caso, la única parte que queda por deshacer es retroceder en dirección inversa con respecto a la clase _MCLowering_ hacia la representación _MachineInstr_ basada en LLVM. – bsa2000

Respuesta

8

Solo para aquellos que todavía están buscando más información sobre este tema, quiero compartir la información sobre un proyecto en curso (http://dslab.epfl.ch/proj/s2e) que he encontrado en la web. El proyecto tiene dos componentes:

  1. x86-to-LLVM backend para la traducción dinámica de código de máquina x86 a LLVM IR
  2. RevGen herramienta para el análisis estático de binarios x86, capaz de traducir montaje x86 inline a LLVM IR

Aquí está RevGen prototipo: RevGen toma como entrada un binario x86 y emite un módulo LLVM equivalente en tres pasos. Primero, RevGen busca todos los bloques ejecutables de código y los convierte a bloques de traducción LLVM. En segundo lugar, cuando no hay más bloques de traducción que cubrir, RevGen los transforma en bloques básicos y reconstruye el gráfico de flujo de control del binario original en formato LLVM. En tercer lugar, RevGen resuelve las llamadas a funciones externas para construir el módulo LLVM final. Para el análisis dinámico, un último paso vincula el módulo LLVM con una biblioteca en tiempo de ejecución que permite la ejecución del módulo LLVM.

+0

Esas herramientas son para trabajar con programas que ya están ensamblados. a menos que usted diga que cualquiera de ellos puede producir un código de bits LLVM/IR desde un x86 .ASM? – TechZilla

+0

@techzilla encontró algo a partir del código fuente x86? – franck

Cuestiones relacionadas