2017-09-18 4 views

Répondre

3

Jetez un oeil à LD_PRELOAD. Cette variable d'environnement peut être définie sur un objet ELF partagé qui sera injecté dans l'espace adresse de votre exécutable. Les fonctions de cet objet préchargé peuvent remplacer des fonctions dans d'autres objets. Dans votre cas cela fonctionnera tant que lib.so n'est pas construit -Bsymbolic. L'option de l'éditeur de liens symbolique résout les appels internes dans la passe de liaison. donc, si lib.so contient et appelle func1 et est construit -Bsymbolic, alors il est assez difficile de remplacer cet appel et vous devrez probablement changer lib.so.

+0

En effet. Jetez un oeil à la source de l'utilitaire 'fakechroot' pour un exemple d'une bonne façon d'utiliser exactement cette technique pour remplacer les appels de bibliothèque standard comme' open() 'avec quelque chose d'autre. –

+0

hey, merci, c'est une excellente réponse! – dsfdf

+0

@Sam Hartman pour être clair - '-Bsymbolic' arrête seulement les appels à' func1' * dans * 'lib.so' d'être interposé (" hooked "). Vous pouvez toujours interposer des appels de 'executable' à' func1' ('-Bdirect' était une expérience antérieure qui a arrêté cette dernière option, et a cassé trop de choses pour survivre.) –