Comment vérifier ce que les bibliothèques partagées sont chargés au moment de l'exécution pour un processus donné?
Est-il un moyen de vérifier que les bibliothèques est un processus en cours d'exécution à l'aide?
Pour être plus précis, si un programme se charge certaines bibliothèques partagées à l'aide de dlopen, puis readelf ou ldd ne va pas le montrer.
Est-il possible d'obtenir cette information à partir d'un processus en cours d'exécution? Si oui, comment?
Vous devez vous connecter pour publier un commentaire.
D'autres personnes sont sur la bonne voie. Voici un couple des manières.
Ou, avec strace:
Ces deux supposer que les bibliothèques partagées de l'avoir ".donc" quelque part dans leur parcours, mais vous pouvez le modifier. La première donne assez jolie sortie en tant que juste une liste de bibliothèques, un par ligne. La seconde va continuer à faire la liste des bibliothèques en tant qu'ils sont ouverts, donc c'est agréable.
Edit: Et bien sûr
lsof
...strace -f
est meilleure lorsque les processus enfant peut être généré/proc/self/maps
chemin oùself
est un lien symbolique vers le processus actuel.Peut être
lsof
- le couteau suisse de linux aider?edit: pour exécuter,
lsof -p <pid>
, des listes de toutes les sortes de renseignements utiles, par exemple, si le processus est en java, les listes de tous les pots - très cool...En fait, vous pouvez le faire dans votre code de la manière suivante:
La
link_map
structure contient au moins l'adresse de base et le nom de fichier absolu. C'est la structure qui est en fait retourné pardlopen()
avec les non-NULL premier argument. Pour plus de détails, voir ici.Sur Linux,
/proc/<processid>/maps
contient une liste de tous les fichiers mappés en mémoire, ce qui je crois doit inclure toutes les chargés pardlopen()
.ltrace
semble être votre ami.De
ltrace
manuel:Sur solaris il y a aussi le pldd de commande.
Serait
strace
trace de la bibliothèque de fichier ouvert?