4
Gracias

Unas palabras de agradecimiento nunca están de más.

Compilar un programa ensamblador con Nasm

Un ensamblador permite ensamblar código en lenguaje ensamblador. Nasm es un ensamblador libre para la arquitectura x86. Podemos encontrarlo para diversos sistemas operativos como Linux o Windows. En este tutorial vamos a ver cómo crear un ejecutable en Linux y Windows a partir de un código fuente destinado a Nasm.




En Linux

Etapa 1. Crear un fichero fuente

No es necesario un editor específico para crear un fichero fuente destinado a Nasm. Podemos elegir entre Gedit, Kwrite, Xemacs etc...

A la hora de guardar el fichero fuente 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...) o compilar Nasm descargando el fichero desde el sitio oficial.

Pasemos ahora al ensamblado del fichero fuente. Dirígete desde la línea de comandos a la carpeta donde se encuentra el fichero fuente, al que llamaremos por ejemplo test.asm. Escribimos:

nasm -f elf test.asm


Esto creará un fichero llamado test.o en el directorio actual. Este fichero 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


Finalmente, el ejecutable ha sido creado, se llama test y se ubica en el directorio actual.

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.

En Windows

IMPORTANTE: 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, main no existe y debe ser reemplazado por WinMain.

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

Primero vamos a instalar Nasm. Podemos descargarlo desde elsitio oficial y seleccionamos la versión Win32 binario.

La etapa más delicada será la de instalar MingW, un entorno de desarrollo libre para Windows.

Hacemos clic aquí y seleccionamos la última versión de MinGW. Ejecutamos este instalador. Si nos ofrece actualizar el instalador desde el inicio, decimos que no. Debemos dejar todas las opciones seleccionadas por defecto.

Ahora vamos a insertar Nasm en el entorno de desarrollo MingW. Descomprime el fichero Nasm y deberías encontrar una carpeta que contiene un fichero 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 destinado a Nasm. Podemos utilizar por ejemplo el bloc de notas, pero debemos tener cuidado con la extensión .txt.

Debemos evitar utilizar procesadores de texto como Word o WordPad que pueden guardar el fichero en un formato no deseado.

Si lo utilizas, también puedes utilizar un editor que utiliza la coloración sintáctica para la sintaxis de Nasm como NasmEdit IDE (gratuito).

En todos los casos recomiendo poner la extensión .asm a los ficheros.

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) En el intérprete de comandos debes ir a la carpeta que contiene tu fichero fuente utilizando el comando “cd”.
Una vez que estés en esta carpeta, ensambla tu fichero fuente (llamémoslo test.asm) con este comando:

nasm -f win32 test.asm -o test.o


Ahora tienes un fichero objeto que aún no es ejecutable. Pasemos a la última etapa.

Etapa 4. Creación y ejecución del programa

En la ventana DOS escribe el siguiente comando para crear el ejecutable:

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.

Foto: © Everypixel

4
Gracias

Unas palabras de agradecimiento nunca están de más.

Haz una pregunta
Nuestros contenidos son redactados en colaboración con expertos del ámbito tecnológico bajo la dirección de Jean-François Pillou, fundador de CCM.net. CCM es un sitio de tecnología líder a nivel internacional y está disponible en 11 idiomas.
El documento « Compilar un programa ensamblador con Nasm » se encuentra disponible bajo una licencia Creative Commons. Puedes copiarlo o modificarlo libremente. No olvides citar a CCM (es.ccm.net) como tu fuente de información.
1 Comentario

¡Suscríbete a nuestra Newsletter!

Recibe nuestros mejores artículos

¡Suscríbete a nuestra Newsletter!