2017-07-30 3 views
0

Je travaille sur un projet où je dois utiliser LD_PRELOAD pour charger des bibliothèques dans l'espace mémoire.Disposition de la mémoire du processus de vidage pendant le temps de chargement

Il est comme:

LD_PRELOAD="./libapp.so" ./my_app 

En raison de certaines raisons (je travaille en fait sur quelques bidouillages binaire), je dois savoir l'adresse mémoire (pas un symbole) de certaines fonctions (disons, foo) dans libapp.so et instrument le code binaire de my_app avant l'exécution.

Cependant, en raison de ASLR (randomisation de disposition d'espace d'adresse), chaque fois libapp.so serait chargé dans l'adresse de mémoire différente, et je suis incapable de connaître l'adresse de mémoire de foo avant l'exécution.

Je pense à intercepter en quelque sorte le temps de chargement, la lecture de l'adresse mémoire de libapp.so, effectuer une instrumentation sur my_app avec l'adresse mémoire de foo, puis chargez my_app dans l'espace mémoire.

Alors voici ma question: comment intercepter le processus de chargement et acquérir l'adresse mémoire de libapp.so?

Répondre

0

Alors voici ma question: comment intercepter le processus de chargement et acquérir l'adresse mémoire de libapp.so?

Cela ne peut pas fonctionner: my_app est chargé (mmap ped en mémoire) par le noyau avant le chargeur commence, et avant qu'il ait eu la chance de regarder LD_PRELOAD.

Votre meilleur pari est soit exécuter l'application avec ASLR désactivée (setarch $whatever -R my_app), ou pour organiser may_app de telle sorte que libapp.so peut dynamiquement instrument my_app une fois qu'il connaît sa propre adresse de charge.