assembly - que - ¿Cómo generar un código ensamblador nasm compilable a partir del código fuente c en Linux?
lenguaje ensamblador pdf (2)
Me parece que es un mejor enfoque para desmontar los archivos objeto en lugar de utilizar el código ensamblador generado por gcc.
Primero, genere un archivo de objeto desde su código fuente:
gcc -fno-asynchronous-unwind-tables -s -c -o main.o main.c
-fno-asynchronous-unwind-tables
: no genera secciones innecesarias como.eh_frame
-s
: hacer un ejecutable más pequeño (tira)-c -o
: genera un archivo de objeto llamadomain.o
Use objconv para generar código
nasm
:objconv -fnasm main.o
El resultado se almacenará en
main.asm
.El resultado será muy similar a la sintaxis de Nasm. Sin embargo, es posible que deba realizar algunos ajustes menores para eliminar advertencias / errores. Simplemente intenta compilarlo con Nasm
nasm -f elf32 main.asm
y arregla los errores / advertencias a mano. Por ejemplo:
- elimine las palabras
align=N
yexecute
/noexecute
de.SECTION
líneas.SECTION
. - eliminar el texto
: function
de declaracionesglobal
- eliminar la línea
default rel
- eliminar las secciones vacías si lo desea, etc.
- elimine las palabras
Enlace el
main.o
resultante que generó Nasm en el paso 3 usando gcc:gcc main.o
También puedes vincularlo usando ld, pero es mucho más difícil.
La plataforma de prueba es de Linux de 32 bits.
Básicamente, sé que gcc se puede usar para generar código ensamblador tanto de Intel como de At & T, pero parece que no se puede usar directamente nasm / tasm para compilar el código ensamblado de estilo Intel gcc generado.
Estoy llevando a cabo un código ASM de análisis de proyectos tanto en Windows como en la plataforma Linux, así que estoy pensando que si ambos pueden ser compilados por un ensamblador independiente de plataformas como Nasm / yasm, podría tener un tiempo mucho más fácil ...
¿Entonces mi pregunta es cómo generar un código ensamblador nasm compilable a partir del código fuente c en Linux?
Si eres perezoso: https://github.com/diogovk/c2nasm
Ahí tengo un guión que hace la sugerencia de Babken Vardanyan automáticamente.