Aide à l’utilisation de LD_PRELOAD

Je souhaite créer une bibliothèque avec une version modifiée de printf, puis appeler LD_PRELOAD pour que mon programme appelle printf et utilise ma version. Quelqu’un peut-il m’expliquer comment utiliser LD_PRELOAD et s’il y a quelque chose de spécial à faire dans mon code ou ma bibliothèque?

Vous venez de définir la variable d’environnement LD_PRELOAD sur le chemin complet de la bibliothèque de remplacement. Étant donné que tous les programmes que vous lancez après cette tentative tenteront d’utiliser cette bibliothèque, vous pouvez créer un script wrapper définissant LD_PRELOAD puis appeler le programme que vous souhaitez exécuter.

  1. Pour autant que je sache, le programme ne peut pas avoir changé de programme (idem, suid ou guid).
  2. Il ne devrait être utilisé qu’à des fins spécifiques telles que le débogage. Autant que je me souvienne, vous pouvez assombrir les fonctions en C (en elfe?). Cependant, les deux techniques – LD_PRELOAD et l’observation doivent être traitées avec le soin extream. Je me souviens avoir découvert un bogue dans l’observation de g_malloc dans le code gpgme (ou un autre problème lié à gpg) lors de la modification des éléments internes de GLib.

La réponse simple est: ne le faites pas. Le plus compliqué – faites-le si et seulement si vous devez le faire – et généralement vous ne le faites pas (sauf si vous écrivez une sorte de logiciel de débogage).

Cela semble être une mauvaise idée. Pourquoi ne pas nommer votre version de printf autrement?