2015-07-17 1 views
0

Ceci est un problème de conception.Tout outil pour syscalls statique-instrument avec le code x86 arbitraire

Mon but est d'intercepter tous les syscalls provenant d'un fichier objet partagé. L'exigence n'est pas de modifier le code noyau (par exemple, ne peut pas écraser la table syscall). Je considère la technique statique de réécriture binaire (spécifiquement, dyninst) pour faire le travail. Cependant, dyninst est très restrictif dans l'écriture du code d'instrumentation (c'est-à-dire ce qu'ils appellent BPatch_snippet); il doit être le code défini par dyninst. Mais j'ai besoin d'insérer des instructions arbitrairesx86_64 aux points d'instrumentation. Y a-t-il d'autres outils de réécriture binaires statiques pouvant autoriser un code d'instrumentation arbitraire?

Répondre

0

Pouvez-vous vous permettre les frais généraux de performance que les outils comme strace encourent?

Je ne vois pas d'option dans strace pour filtrer par la bibliothèque partagée, mais peut-être ajouter que le code source de strace serait plus facile que de partir de zéro.

Il existe également perf (généralement utilisé pour l'enregistrement des compteurs de performance du processeur), mais il dispose d'un mode de suivi des appels système. Je ne suis pas sûr exactement ce que perf trace est censé faire. Je pense que vous devez utiliser perf record ... your_command, avec des options qui enregistrent les appels sys.

Puisque perf peut vous montrer des rapports de performance avec des choses réparties par objet partagé, il peut probablement faire similaire avec les appels système.