sirve que para lenguaje historia ensamblador ejemplos dev convertir compilador codigo assembler asm assembly nasm gas tasm yasm

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.

  1. 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 llamado main.o

  2. Use objconv para generar código nasm :

    objconv -fnasm main.o

    El resultado se almacenará en main.asm .

  3. 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 y execute / noexecute de .SECTION líneas .SECTION .
    • eliminar el texto : function de declaraciones global
    • eliminar la línea default rel
    • eliminar las secciones vacías si lo desea, etc.
  4. 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?