strace est un utilitaire permettant de tracer/suivre les appels systèmes. Comment utiliser strace pour debugguer des applications ou des exécutables ?
strace est un utilitaire permettant de tracer/suivre les appels systèmes.
Les appels systèmes sont les interfaces fondamentales entre les applications et le noyau.
Généralement, ils ne sont pas appelés directement, mais via des wrappers de la glibc.
Par exemples: fstat, mmap, open, close
En utilisant strace, on peut intercepter ces appels systèmes pour un processus ou une commande donnée.
strace est donc un outil puissant de dépannage pour tous les administrateurs et utilisateurs unix/linux.
Strace utilisation basique
strace commande
Appels systèmes dans un fichier
Si vous voulez enregistrer la sortie strace dans un fichier, utilisez:
strace -o filename commande
Par exemple:
Rapport/sommaire d’appels systèmes
strace -c command permet de faire un rapport des appels systèmes. Par exemple:
Ici, l’appel système open génère 14 erreurs. Comment tracer spécifiquement ces appels systèmes ?
Tracer un appel système spécifique
On utilise l’option -e de strace:
On voit clairement que ifconfig essaye d’ouvrir des fichiers absents. Combien ?
Exactement 14 !!! comme l’indiquait le rapport d’appels systèmes.
Tracer plusieurs appels systèmes spécifiques
On peut utiliser l’option -e trace=function1,function2, …
Par exemple pour tracer les appels systèmes mprotect ou brk:
Tracer une catégorie spécifique d’appels systèmes
-e trace=file
On peut penser qu’il s’agit là d’une abréviation de -e trace=open,stat,chmod,unlink,…En outre, utiliser cette
abréviation permet de s’assurer que l’on n’omet pas d’inclure les appels lstat
-e trace=process
Trace tous les appels systèmes liés à la gestion des processus. C’est particulièrement utile pour suivre les étapes fork, wait et exec d’un process.
-e trace=network
Trace tous les appels systèmes de type réseau.
-e trace=signal
Trace tous les appels systèmes de type signal.
-e trace=ipc
Trace tous les appels systèmes IPC.
-e trace=desc
Trace tous les appels systèmes liés aux descripteurs.
Par exemple pour tracer les appels spécifiques au réseau (network):
Récupérer les horodatages/timestamps et les temps d’appels sytèmes
Il peut àªtre utile de récupérer les temps d’appels systèmes et leur timestamp:
strace -r Timestamp relatif - temps passé pour un appel système
strace -t Préfixer chaque ligne par la date du jour
strace -tt Préfixer chaque ligne par la date du jour à la microseconde près
strace -ttt Préfixer chaque ligne par la date du jour à la microseconde près depuis le 1er janvier 1970 (The Epoch)
Que faire lorsqu’un processus fork
Vous pouvez suivre les appels systèmes, si un processus fork en utilisant l’option -f
Attacher à un processus existant
Pour attacher strace à un processus existant:
strace -p PID
Par exemple:
Essayons maintenant de nous connecter sur le serveur kali (IP:192.168.1.14):
Maintenant on a quelque chose du type:
Une pair de sockets connectés est créé socketpair(…) avec pour addresse distante 192.168.1.23:45468
En outre, on voit clairement que la connection est établie :
J’espère avoir pu vous aider !!! Strace est un outil très puissant, ne pas oublier man strace !!!
Si vous avez trouvé cet article ou ce site utile et souhaitez soutenir notre travail, veuillez envisager de faire un don. Merci !