Int 80h
# Int 80h

La instrucción int 80h es utilizada en lenguaje ensamblador x86 para provocar una interrupción de software e invocar los servicios de GNU/Linux. En Linux existen llamadas (system calls) que proveen funciones básicas para acceder al hardware: los discos, el teclado, el video, los puertos, etc. Estas funciones básicas se llaman servicios a programas o APIs (Application Programming Interface).

## Introducción

Existen aproximadamente 250 servicios que brinda esta interrupción. El número del servicio se pone en EAX y luego se ponen los demás parámetros en los restantes registros del microprocesador: EBX, ECX, EDX, ESI, EDI y EBP.

### Ejemplos

Servicio 1: salida del proceso actual y retorno al sistema que lo invocó. En EBX se coloca el modo de salida, generalmente ponemos 0 para indicar que la salida se produjo normalmente (es decir, no fue causada por un error).

En NASM

En Gas

Servicio 3: lectura (read). Los parámetros necesarios son:

    EBX: unidad de entrada (0: entrada estándar).
    ECX: Puntero a un área de memoria donde se dejarán los caracteres obtenidos.
    EDX: Número máximo de caracteres a leer.

En NASM

En Gas

Servicio 4: escritura (write). Los parámetros necesarios son:

    EBX: unidad de salida (1: salida estándar).
    ECX: Puntero a un área de memoria donde se encuentran los caracteres a mostrar.
    EDX: Número máximo de caracteres a mostrar.

En NASM

En Gas

Servicios para el trabajo con archivos

Servicio 5: apertura (open). Los parámetros necesarios son:

    EBX: la dirección de una cadena de caracteres terminada en nulo.
    ECX: Modo de acceso.
    EDX: permisos al archivo, si se abre creándolo.

Modos de acceso:

    O-RDONLY 0: El archivo se abre sólo para leer de él.
    O-WRONLY 1: El archivo se abre sólo para escribir en él.
    O-RDWR 2: El archivo se abre para lectura y escritura.
    O-CREAT 256: Crear el archivo en caso de que no exista.
    O-APPEND 2000h: El archivo se abre sólo para escritura al final, añadiendo información.

Permisos:

    S-IRUSR 400H: El archivo puede ser leído por el dueño.
    S-IWUSR 200h: El archivo puede ser escrito por el dueño.
    S-IROTH: El archivo puede ser leído por otros usuarios.
    S-IWOTH: El archivo puede ser escrito por otros usuarios .

En NASM

En Gas

Como alternativa para crear archivos se puede usar el servicio 8 (create).

Para lectura y escritura del archivo se utilizan los servicios 3 y 4 mencionados anteriormente, pero se les cambia el valor de EBX por la dirección del archivo a leer/escribir o el descriptor del mismo.

Para manipular el puntero en el archivo se utiliza el servicio 13h (lseek). Los parámetros necesarios son:

    EBX: Descriptor del archivo cuyo puntero va a manipularse
    ECX: Número de bytes a desplazarse desde el punto que es indicado como referencia.
    EDX: Punto de referencia para el desplazamiento. 0 inicio, 1 posición actual, 2 final

Ej: posicionarse al inicio del archivo

En NASM

En Gas

Después de trabajar con el archivo, éste se debe cerrar. Para eso existe el servicio 6 (close), para el cual basta poner en EBX el descriptor del archivo a cerrar.

Existen muchos más servicios, por ejemplo para el trabajo con el reloj del PC, para el trabajo con directorios, para eliminar procesos, etc.

