Provided by: manpages-fr-dev_3.65d1p1-1_all bug

NOM

       dl_iterate_phdr - Parcourir une liste d'objets partagés

SYNOPSIS

       #define _GNU_SOURCE         /* Consultez feature_test_macros(7) */
       #include <link.h>

       int dl_iterate_phdr(
                 int (*callback) (struct dl_phdr_info *info,
                                  size_t size, void *data,
                 void *data;

DESCRIPTION

       La  fonction  dl_iterate_phdr()  permet à une application de s'informer lors de son exécution, des objets
       partagés qu'elle a chargé.

       La fonction dl_iterate_phdr() parcourt la liste des objets partagés par une  application  et  appelle  la
       fonction  callback  sur  chaque objet jusqu'à ce que tous les objets partagés aient été traités ou que la
       fonction callback ait renvoyé une valeur non nulle.

       Chaque appel de callback prend trois arguments : info qui est un pointeur vers  une  structure  contenant
       des  informations  sur les objets partagés ; size qui est la taille de la structure pointée par info ; et
       data qui est une copie de toute valeur qui est passée par le programme appelant dans le  second  argument
       (également nommé data) lors de l'appel de dl_iterate_phdr().

       L'argument info est une structure du type suivant :

           struct dl_phdr_info {
               ElfW(Addr)        dlpi_addr;  /* Adresse de base de l'objet */
               const char       *dlpi_name;  /* Nom de l'objet (terminée par
                                                un octet nul */
               const ElfW(Phdr) *dlpi_phdr;  /* Pointeur vers un tableau des
                                                en-têtes ELF du programme
                                                de cet objet */
               ElfW(Half)        dlpi_phnum; /* Nombre d'éléments dans
                                                dlpi_phdr */
           };

       (La  macro  ElfW()  convertit  son  argument  en  un  nom  de type de données ELF adapté à l'architecture
       matériel. Par exemple, sur un système 32-bits, ElfW(Addr) produit le type de  données  nommé  Elf32_Addr.
       Des  informations supplémentaires sur ces types peuvent être trouvées dans les fichiers d'en-tête <elf.h>
       et <link.h>).

       Le champ dlpi_addr indique l'adresse de base de l'objet partagé (la différence entre l'adresse en mémoire
       virtuelle de l'objet partagé et le décalage avec cet objet  dans  le  fichier  depuis  lequel  il  a  été
       chargé).  Le  champ  dlpi_name  est  une  chaîne de caractères terminée par un caractère nul indiquant le
       chemin à partir duquel l'objet partagé a été chargé.

       Pour comprendre le sens des champs dlpi_phdr et dlpi_phnum, il faut  se  rendre  compte  que  les  objets
       partagés ELF sont un nombre de segments, chacun d'eux possédant un en-tête décrivant le segment. Le champ
       dlpi_phdr  est  un  pointeur  vers  un  tableau  des en-têtes du programme de cet objet partagé. Le champ
       dlpi_phnum est la taille de ce tableau.

       Ces en-têtes de programme sont structurés sous la forme suivantes :

           typedef struct
             {
               Elf32_Word  p_type;    /* Type de segment */
               Elf32_Off   p_offset;  /* Décalage du fichier de segment (?) */
               Elf32_Addr  p_vaddr;   /* Adresse virtuelle du segment */
               Elf32_Addr  p_paddr;   /* Adresse physique du segment */
               Elf32_Word  p_filesz;  /* Taille du segment dans le fichier */
               Elf32_Word  p_memsz;   /* Taille du segment en mémoire */
               Elf32_Word  p_flags;   /* Drapeau du segment */
               Elf32_Word  p_align;   /* Alignement du segment */
           } Elf32_Phdr;

       Notez que la position d'un en-tête de programme, x, en mémoire virtuelle est  calculée  avec  la  formule
       suivante :

         addr == info->dlpi_addr + info->dlpi_phdr[x].p_vaddr;

VALEUR RENVOYÉE

       La  fonction  dl_iterate_phdr()  renvoie  quoi  qu'il  en  soit la valeur renvoyée par le dernier appel à
       callback.

VERSIONS

       dl_iterate_phdr() est géré par la glibc depuis la version 2.2.4.

CONFORMITÉ

       La fonction dl_iterate_phdr() est spécifique à Linux et ne doit pas être utilisée pour  des  applications
       portables.

EXEMPLE

       Le  programme  suivant affiche la liste des chemins des objets partagés qu'il a chargé. Pour chaque objet
       partagé, le programme liste les adresses virtuelles auxquelles les segments ELF de l'objet sont chargés.

       #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);
       }

VOIR AUSSI

       ldd(1), objdump(1), readelf(1), dlopen(3), elf(5), ld.so(8)

       « Executable and Linking Format Specification » disponible en ligne à divers endroits.

COLOPHON

       Cette page fait partie de la publication 3.65 du projet man-pages Linux. Une description du projet et des
       instructions    pour    signaler    des    anomalies    peuvent     être     trouvées     à     l'adresse
       http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par
       l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.

       Christophe       Blaess       <http://www.blaess.fr/christophe/>      (1996-2003),      Alain      Portal
       <http://manpagesfr.free.fr/> (2003-2006). Florentin Duneau  et  l'équipe  francophone  de  traduction  de
       Debian (2006-2009).

       Veuillez  signaler  toute erreur de traduction en écrivant à <debian-l10n-french@lists.debian.org> ou par
       un rapport de bogue sur le paquet manpages-fr.

       Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « man -L C
       <section> <page_de_man> ».

GNU                                                18 mai 2007                                DL_ITERATE_PHDR(3)