A veces me gusta probar nuevas herramientas incluso cuando ya tengo un conjunto de herramientas, solo por diversión. En este caso, investigué sobre la suite valgrind, en particular callgrind. Callgrind es una herramienta de perfilado que registra la traza de llamadas entre funciones en la ejecución de un programa como un gráfico de llamadas. Por defecto, la información recopilada consiste en el número de instrucciones ejecutadas, la relación de llamadas entre funciones, el número de dichas llamadas…
Entonces, intentemos usar callgrind para ejecutar un proceso y obtener todas las llamadas a la API como lo hace un monitor de sandbox. Para recopilar la información, podemos ejecutarlo de esta manera:
valgrind --tool=callgrind --dump-instr=yes --collect-jumps=yes program
Esto creará un montón de archivos en el directorio de trabajo actual con este formato: callgrind.out.$PID. Estos archivos contienen todos los detalles de ejecución.
Podemos usar kcachegrind para analizar la información, esta es una aplicación de escritorio que analiza los archivos volcados para examinar toda la información.
En este ejemplo analizaremos el comando “apt-get update”. Una vez que abras el archivo de salida con kcachegrind, seleccionaremos el Objeto ELF (1), elegiremos el objeto (2), seleccionaremos la rama para analizar (3), iremos a tipos (4) y mostraremos el gráfico de llamadas (5).
Ahora, opcionalmente puedes inspeccionar el ensamblaje ejecutado (6)