Ensamblador NASM: qué es y cómo utilizar en Linux y Windows
NASM es un ensamblador libre para la arquitectura x86. Este se utiliza para traducir código ensamblador a lenguaje máquina. Podemos encontrarlo para diversos sistemas operativos como Linux o Windows. En este tutorial vamos a ver cómo se crea un ejecutable a partir del código fuente.
¿Cómo compilar con NASM en Linux?
Etapa 1 - Crear un fichero fuente
No es necesario un editor específico para crear un fichero fuente en lenguaje ensamblador. Podemos elegir entre Gedit, Kwrite, Xemacs, etc. A la hora de guardarlo deberás ponerle la extensión .asm.
Etapa 2 - Ensamblar el fichero fuente
- Para esta etapa, necesitaremos que el programa NASM esté instalado en nuestra computadora. Si tienes Debian o Ubuntu, simplemente escribe el comando:
sudo apt-get install nasm
- Si utilizas otra distribución Linux, deberás utilizar el gestor de paquetes de tu distribución (por ejemplo urpmi, yum, emerge...).
- Pasemos ahora al ensamblado del fichero fuente. Dirígete desde la línea de comandos a la carpeta donde se encuentra. En este ejemplo lo hemos llamado "test.asm". Escribimos:
nasm -f elf test.asm
- Esto creará un fichero llamado "test.o" en el directorio actual. Este aún no es ejecutable, únicamente es un fichero objeto. Es necesario leerlo con las bibliotecas de las que depende como, por ejemplo, la biblioteca standard libc.
Etapa 3 - Creación del ejecutable
Ahora que ya tenemos nuestro fichero objeto llamado "test.o" vamos a crear nuestro ejecutable. Aquí se dan dos casos:
- El programa inicia con un procedimiento llamado “_start”. Esto significa que el programa posee su propio punto de entrada sin utilizar la función main. Esto no cambia mucho, sin embargo necesitarás utilizar el comando ld para crear el ejecutable:
ld test.o -o test
- El programa inicia con un procedimiento llamado “main”. Entonces necesitarás utilizar gcc para crear el ejecutable:
gcc test.o -o test
Etapa 4: Ejecución del programa
- Para ejecutar nuestro programa llamado “test”, basta con escribir este comando:
./test
- También podemos utilizar un depurador para observar la ejecución. Podemos utilizar gdb, que se utiliza en línea de comandos. Si deseas un depurador visual existen interfaces gráficas que utilizan gdb en segundo plano, como por ejemplo Insight.
¿Cómo compilar con NASM en Windows?
En Windows cambia la manera en la que se llama a los parámetros, la función llamada debe limpiar ella misma la pila. Además, si tu punto de entrada es "_start" o "main", deberás cambiarlo a "_WinMain@16" y sustituir “ret” por "ret 16". A continuación, un ejemplo de un fichero fuente correcto utilizado en Windows:
section .text global _WinMain@16 _WinMain@16: mov eax, 0 ret 16
Etapa 1 - Instalar los programas necesarios
En primer lugar tendrás que instalar NASM y MinGW, si todavía no dispones de ellos en tu ordenador. Una vez hecho esto, vamos a insertar NASM en el entorno de desarrollo MingW. Descomprime el fichero NASM y deberías encontrar una carpeta que contiene un archivo llamado nasm.exe. Copia este fichero en la carpeta C:\MinGW\bin.
Etapa 2 - Crear un fichero fuente
Al igual que en Linux, no es necesario utilizar un editor específico para crear un fichero fuente. Podemos utilizar, por ejemplo, el bloc de notas. Eso sí, debemos tener cuidado con la extensión .txt. No se recomienda utilizar procesadores de texto como Word o WordPad que pueden guardar el fichero en un formato no deseado. También puedes emplear un editor que utiliza la coloración sintáctica para la sintaxis de NASM como NasmEdit IDE (gratuito). En todos los casos se recomienda poner la extensión .asm.
Etapa 3 - Ensamblar el fichero fuente
Abre el intérprete de comandos de Windows (escribe cmd.exe en “Ejecutar” del menú Inicio o directamente cmd en la barra de búsqueda). Aquí, debes ir a la carpeta que contiene tu fichero fuente utilizando el comando cd. Una vez hecho esto, ensambla el fichero fuente (llamémoslo test.asm) con este comando:
nasm -f win32 test.asm -o test.o
Etapa 4 - Creación y ejecución del programa
- Para crear el ejecutable, escribe en la ventana DOS la siguiente línea de código:
ld test.o -o test.exe
- Para testar el ejecutable, simplemente escribe “test” en la ventana DOS. Si deseas un depurador para visualizar mejor lo que sucede, utiliza OllyDbg, un excelente depurador.