sábado, julio 16, 2011

Traceando llamadas al sistemas en Snow Leopard (MacOS X 10.6.x)

Los que hemos trabajado en Linux muchos años estamos acostumbrados a la utilidad strace que nos permitía estudiar las llamadas al sistemas que realizaba un determinado programa y obtener una serie de información asociada a las mismas: parámetros que se les pasa, tiempo de ejecución y valores devueltos. Aparte, posee la posibilidad de seguir todos aquellos procesos hijos que el proceso padre genere.

En a MacOS X 10.6 es dtruss nos permite tener una funcionalidad similar. Esta utilidad está construida sobre el marco de monitorización dtrace, originario de Solaris y que ha sido portado a MacOS X por Apple.

Lo primero que debemos de tener en cuenta a la hora de utilizar dtruss son los privilegios necesarios para su ejecución: Por defecto, es necesario estar usando un usuario que tenga permisos de administrador. Para ejecutar dtruss hay que usar un usuario que tenga permisos de administrador las siguiente orden:

swordcoast:~ terron$ sudo dtrace ls

Una vez que el sistema nos autorice, ejecutará el comando ls y nos mostrará la información de las llamadas el sistema que se están haciendo:

SYSCALL(args)          = return
ioctl(0x1, 0x4004667A, 0x7FFF5FBFF50C)         = 0 0
ioctl(0x1, 0x40087468, 0x7FFF5FBFF5A0)         = 0 0
getuid(0x1, 0x40087468, 0x0)         = 0 0
mmap(0x0, 0x1000000, 0x3, 0x1002, 0x2000000, 0x2280F400000000)         = 0x300000 0
munmap(0x100300000, 0x500000)         = 0 0
munmap(0x101000000, 0x300000)         = 0 0
...

Existen diversos parámetros que les podemos pasar a la utilidad para conseguir el comportamiento que deseemos. Entre los flags más interesantes tenemos -f que hace que dtruss sea capaz de seguir los procesos hijos que genere el proceso que hemos lanzado, -t llamada que nos permite especificar una llamada al sistema que queramos analizar, -p pid para seguir lo que está haciendo el proceso identificado por pid

Una cuestión de seguridad importante es que MacOS X ejecuta el proceso que estemos analizando a través de dtruss como usuario root. Esto puede tener implicaciones de seguridad, así que llegado el momento, puede ser una opción ejecutar el programa que se quiere analizar como un usuario normal y en otra ventana, autentificarnos en el sistema como un usuario administrador y usar la opción -p de dtruss especificando el pid el proceso que queramos analizar.


Technorati Tags:

No hay comentarios: