Assembly

Informacion:

Para programar en Linux usando el lenguaje assembly tenes tres alternativas:

  • GAS - The GNU Assembler
  • NASM - Netwide Assembler (mi favorito)
  • FASM - Flat Assembler (muy bueno)

 

GAS - GNU Assembler:

Es parte de la GNU Binutils (http://www.gnu.org/software/binutils/)
La verdad que como assembler no me gusta para nada.
El formato AT&T es horrible y aunque ya hace tiempo que se puede escribir en formato Intel (utilizando .intel_syntax), NASM lo sigue superando por mucho.
Para invocarlo ejecuta "as".

 

NASM - Netwide Assembler:

El mejor assembler para Linux.
Solo necesitas el ejecutable "nasm" lo que lo hace portable.
Viene para 32 y 64 bits y ademas incluye un desensamblador.
Descarga la ultima version desde su nuevo sitio oficial: http://www.nasm.us/

 

FASM - Flat Assembler:

Otro excelente assembler multiplataforma.
Tambien es portable porque solo consta de un ejecutable "fasm".
Algo notable es que ademas incluye header files para dialogar con varias librerias como por ej. GTK+.
Conseguilo aqui: http://flatassembler.net

 

Mi primer programa assembly para Linux usando NASM y GCC:

De ahora en mas solo voy a mostrar ejemplos utilizando NASM como assembler y GCC+Binutils para crear el ejecutable.
Para este ejemplo voy crear un archivo prueba.cpp con el siguiente texto:

Y para compilador escribo:

nasm -f elf prueba.asm
gcc -s -g0 -o prueba prueba.o

En la primera linea genero un objeto (archivo .o) preparado para el formato ELF de Linux
Y en la segunda le digo al GCC que me ayude a linkear (gracias a ld) ese objeto "prueba.o" y que me genere un ejecutable llamado "prueba".
Los parametros -s y -g0 no son necesarios, pero sirven para no dejar basura dentro del ejecutable que lo hace mas grande.

 

Comentarios