2009-05-29 6 views
0

J'essaye d'écrire un programme qui permet à un binaire d'être exécuté, en substituant un certain fichier à la demande d'un autre. C'est une bibliothèque avec des remplacements simples pour les fonctions d'appel système, qui est utilisée avec LD_PRELOAD. Le problème est qu'il s'ouvre à la lecture (le fichier de remplacement est lu à la place), mais écrit toujours revenir au fichier spécifié. Y a-t-il d'autres appels système "ouverts" que je devrais connaître?Problème de remplacement des appels système Linux à l'aide de LD_PRELOAD

+0

Avez-vous essayé stracing le binaire pour voir quel descripteur de fichier les écritures sont, et où que fd vient? –

Répondre

4

Nevermind - erreur stupide.

ne vérifiait pas les deux chemins absolus et relatifs ...

+0

+1 pour le trouver seul – lothar

2

Je ne sais pas quelle est la cause de votre problème, mais l'utilisation de strace dans votre programme peut donner un aperçu. Cela devrait faire partie de toute distribution Linux saine.

1

en remplaçant un certain fichier sur demande avec un autre

On dirait que vous vérifiez que le fichier d'entrée (vérifiez-vous par nom de fichier?). Vous devez vérifier et remplacer le fichier de sortie aussi.

Si la sortie est destinée à l'une des sorties standard, vous devez les fermer et les rouvrir avec votre substitut de sortie avant de vous lancer dans l'exécutable.

Pour rechercher tous les appels système que votre fichier exécutable effectue, vous pouvez utiliser strace.
Pour rechercher tous les appels de bibliothèque que votre fichier exécutable effectue, vous pouvez utiliser ltrace.

2

S'il est ouvert pour l'écriture, il est très probable qu'il passe par la fonction creat (je suppose que fopen vous redirigerait là-bas). Vérifiez votre fcntl.h pour une liste complète.

Questions connexes