J'ai deux idées pour cela.
Méthode 1 - La "vraie façon".
Je pense que vous voulez ptrace. Mais ce ne sera pas facile à utiliser. Essentiellement, cet appel est pour l'écriture d'un débogueur. Notez que PTRACE_SYSCALL
étapes jusqu'à la prochaine syscall. À ce stade, vous pourriez être en mesure d'utiliser plus d'appels ptrace
pour jeter un coup d'œil à la mémoire du processus pour observer si c'est, disons, un appel à open()
.
Méthode 2 - La manière paresseuse et hackish.
Vous pouvez utiliser la variable d'environnement LD_PRELOAD
. C'est-à-dire, écrivez une bibliothèque partagée avec votre propre implémentation des appels que vous voulez connecter (par exemple, open()
, dlopen()
), en ajoutant votre propre code et en l'envoyant à la version normale de la libc. Ensuite, pointez la variable d'environnement LD_PRELOAD
sur cette bibliothèque partagée afin que l'éditeur de liens dynamique la charge au démarrage du processus. Un inconvénient de cette approche est que si un processus sait qu'il est observé de cette façon, il peut réinitialiser la variable d'environnement et s'exécuter à nouveau, et échapper à la détection. Une autre chose que je peux penser est que, en tant que fonctionnalité de sécurité, cette variable d'environnement n'est pas honorée si vous êtes root.