71 votes

Comment vérifier quelles bibliothèques partagées sont chargées au moment de l'exécution pour un processus donné ?

Existe-t-il un moyen de vérifier les bibliothèques utilisées par un processus en cours d'exécution ?

Pour être plus spécifique, si un programme charge certaines bibliothèques partagées en utilisant dlopen alors readelf ou ldd ne vont pas le montrer. Est-il possible d'obtenir cette information à partir d'un processus en cours d'exécution ? Si oui, comment ?

4voto

Christian.K Points 18883

Sous Solaris, il existe également la commande pldd.

3voto

Nicolas Dusart Points 631

Vous pouvez le faire de manière programmatique sous Linux. Vous pouvez utiliser la fonction dl_iterate_phdr .

Voici un petit exemple tiré de la page de manuel :

#define _GNU_SOURCE
#include <link.h>
#include <stdlib.h>
#include <stdio.h>

static int
callback(struct dl_phdr_info *info, size_t size, void *data)
{
    int j;

   printf("name=%s (%d segments)\n", info->dlpi_name,
        info->dlpi_phnum);

   for (j = 0; j < info->dlpi_phnum; j++)
         printf("\t\t header %2d: address=%10p\n", j,
             (void *) (info->dlpi_addr + info->dlpi_phdr[j].p_vaddr));
    return 0;
}

int
main(int argc, char *argv[])
{
    dl_iterate_phdr(callback, NULL);

   exit(EXIT_SUCCESS);
}

2voto

Martin Broadhurst Points 3777

Serait-ce strace trace le fichier de la bibliothèque en cours d'ouverture ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X