L'idée de LD_PRELOAD
est de charger une bibliothèque partagée avant la bibliothèque partagée d'origine. mylib.so
pour le charger avant libc.so
Ainsi, lorsque le processus veut utiliser printf
il recherche dans le so
qui a été chargé un par un et le trouve dans mylib.so
(parce que cette so
a été chargé en premier) au lieu de libc.so
Il utilise donc l'option printf
en mylib.so
au lieu de printf
en libc.so
.
Je comprends pourquoi cela fonctionne pour les fonctions qui sont mises en œuvre dans une so
comme printf
en libc.so
.
Mais quand je veux m'accrocher write
ou une autre fonction syscall
pourquoi cela fonctionne-t-il ? Le processus ne recherche pas la fonction dans le so
il va directement au noyau.
-
Fait
LD_PRELOAD
fonctionne sur un binaire compilé statiquement ? Pourquoi ? Dans cette rediffusion https://stackoverflow.com/a/13866611 a mentionné queLD PRELOAD
Ne fonctionne pas sur les systèmes binaires statiques. -
Pourquoi les
LD_PRELOAD
fonctionne sur un binaire compilé dynamiquement pour faire des crochets sur les appels de service ?
L'architecture est ARM.