Syscall project
sudo docker-compose run syscall bash-
La aplicación que corre dentro del userspace configura los parámetros y llama a la syscall número 333.
-
Después, se ejecuta la instrucción de llamada a las syscall, misma que causa una excepción: el procesador salta a una nueva dirección y comienza a ejecutar el código que ahí se encuentra.
-
Estas instrucciones guardan el estado actual de la aplicación, buscan en la tabla de syscalls cuál es la que se está llamando y se ejectua el código. Se llama a esta función en el kernel, regresa el estado anterior de la aplicación y regresa el control de nuevo al usuario.
Referencia aquí
-
Descargamos una imagen de Ubuntu Linux, la versión 16.04 LTS disponible aquí
-
Creamos una máquina virtual a partir de esta imagen. Esta virtualización fue hecha en Virtual Box.
-
Descargamos el kernel de linux versión 4.17.4 dentro de la máquina virtual, disponible aquí
-
Extrajimos el código descargado del paso anterior dentro de la carpeta /usr/src
-
Esto nos crea una carpeta llamada linux-4.17.4/ en donde desarrollamos el código con la implementación del algoritmo para validar si una expresión está bien escrita o no, utilizando métodos para hacer uso del stack en modo kernel: kmalloc (utiliza una bandera) y kfree.
-
Para escribir el código y recibir parámetros desde el userspace, utilizamos un macro. SYSTEM_DEFINEn.
-
Después de escribir el código, creamos un Makefile dentro de la carpeta para definir el archivo .objeto de nuestro código.
-
Modificamos el archivo Makefile dentro de la carpeta linux-4.17.4/, esto para que a la hora de compilar el kernel, tomase en cuenta nuestro nuevo código agregado.
-
Agregamos nuestra función en la tabla de direcciones de las llamadas del sistema en el archivo arch/x86/entry/syscalls/syscall_64.tbl. Le hemos asignado el número 333, que es el número inmediato a la última llamada ahí escrita.
-
Compilamos el kernel haciendo uso del comando: sudo make, dentro de la carpeta linux-4.17.4/
-
Instalamos el kernel ya compilado a la máquina. Reinicio y posterior prueba de la llamada a la función utilizando el número 333 y mandando los parámetros correspondientes.
-
Creamos un contenedor utilizando docker y docker-compose, en donde hicimos un volumen para hacer uso del código que llama a la syscall.


