Int 80hLa 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ónExisten 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. EjemplosServicio 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 mov eax,1
mov ebx,0
int 80h
En Gas movl $0, %ebx
movl $1, %eax
intl $0x80
Servicio 3: lectura (read). Los parámetros necesarios son:
En NASM mov eax,3
mov ebx,0
mov ecx,oración
mov edx,100
int 80h
En Gas movl $100, %edx
movl $oración, %ecx
movl $0, %ebx
movl $3, %eax
intl $0x80
Servicio 4: escritura (write). Los parámetros necesarios son:
En NASM mov eax,4
mov ebx,1
mov ecx,oración
mov edx,100
int 80h
En Gas movl $100, %edx
movl $oración, %ecx
movl $1, %ebx
movl $4, %eax
intl $0x80
Servicios para el trabajo con archivos Servicio 5: apertura (open). Los parámetros necesarios son:
Modos de acceso:
Permisos:
En NASM mov eax,5
mov ebx,”pepito.txt”,0
mov ecx,1
mov edx,0
int 80h
En Gas movl $0, %edx
movl $1, %ecx
movl $”pepito.txt”, %ebx
movl $5, %eax
intl $0x80
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:
Ej: posicionarse al inicio del archivo En NASM mov eax,13h
mov ebx, descriptor
mov ecx,0
mov edx,0
int 80h
En Gas movl $0, %edx
movl $0, %ecx
movl $descriptor, %ebx
movl $0x13, %eax
intl $0x80
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. ReferenciasUnix Assembly Language Programming (En inglés) Archivado el 17 de febrero de 2020 en Wayback Machine. Véase tambiénLinux System Call Table (En inglés) Archivado el 4 de octubre de 2012 en Wayback Machine. |