- 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ó
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).
mov eax,1 mov ebx,0 int 80h
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.
mov eax,3 mov bx,0 mov ecx,oración mov edx,100 int 80h
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.
mov eax,4 mov bx,1 mov ecx,oración mov edx,100 int 80h
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 .
mov eax,5 mov ebx,”pepito.txt”,0 mov ecx,1 mov edx,0 int 80h
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
mov eax,13h mov bx, descriptor mov ecx,0 mov edx,0 int 80h
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.
Categorías:- Linux
- Interrupciones
Wikimedia foundation. 2010.