Provided by: manpages-fr-dev_3.27fr1.4-1_all bug

NOM

       dl_iterate_phdr - Parcourir une liste d'objets partages

SYNOPSIS

       #define _GNU_SOURCE
       #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 a une application de s'informer
       lors de son execution, des objets partages qu'elle a charge.

       La fonction dl_iterate_phdr() parcourt la liste des objets partages par
       une  application  et  appelle  la  fonction  callback  sur chaque objet
       jusqu'a ce que tous les objets partages aient ete  traites  ou  que  la
       fonction callback ait renvoye 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
       partages ; size qui est la taille de la structure pointee par info ; et
       data qui est une copie de toute valeur qui est passee par le  programme
       appelant dans le second argument (egalement nomme 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 (terminee par
                                                un octet nul */
               const ElfW(Phdr) *dlpi_phdr;  /* Pointeur vers un tableau des
                                                en-tetes ELF du programme
                                                de cet objet */
               ElfW(Half)        dlpi_phnum; /* Nombre d'elements dans
                                                dlpi_phdr */
           };

       (La macro ElfW() convertit son argument en un nom de  type  de  donnees
       ELF  adapte  a  l'architecture  materiel.  Par  exemple, sur un systeme
       32-bits, ElfW(Addr) produit le type de donnees  nomme  Elf32_Addr.  Des
       informations  supplementaires  sur ces types peuvent etre trouvees dans
       les fichiers d'en-tete <elf.h> et <link.h>).

       Le champ dlpi_addr indique l'adresse de base  de  l'objet  partage  (la
       difference  entre  l'adresse en memoire virtuelle de l'objet partage et
       le decalage avec cet objet dans le  fichier  depuis  lequel  il  a  ete
       charge).  Le  champ dlpi_name est une chaine de caracteres terminee par
       un caractere nul indiquant le chemin a partir duquel l'objet partage  a
       ete charge.

       Pour  comprendre le sens des champs dlpi_phdr et dlpi_phnum, il faut se
       rendre compte que les objets partages ELF sont un nombre  de  segments,
       chacun  d'eux  possedant  un  en-tete  decrivant  le  segment. Le champ
       dlpi_phdr est un pointeur vers un tableau des en-tetes du programme  de
       cet objet partage. Le champ dlpi_phnum est la taille de ce tableau.

       Ces en-tetes de programme sont structures sous la forme suivantes :

           typedef struct
             {
               Elf32_Word  p_type;    /* Type de segment */
               Elf32_Off   p_offset;  /* Decalage 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 memoire */
               Elf32_Word  p_flags;   /* Drapeau du segment */
               Elf32_Word  p_align;   /* Alignement du segment */
           } Elf32_Phdr;

       Notez  que  la  position  d'un  en-tete  de  programme,  x,  en memoire
       virtuelle est calculee avec la formule suivante :

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

VALEUR RENVOY'EE

       La fonction dl_iterate_phdr() renvoie quoi  qu'il  en  soit  la  valeur
       renvoyee par le dernier appel a callback.

VERSIONS

       dl_iterate_phdr() est gere par la glibc depuis la version 2.2.4.

CONFORMIT'E

       La  fonction  dl_iterate_phdr()  est  specifique a Linux et ne doit pas
       etre utilisee pour des applications portables.

EXEMPLE

       Le programme suivant affiche la liste des chemins des  objets  partages
       qu'il  a  charge.  Pour  chaque  objet  partage, le programme liste les
       adresses  virtuelles  auxquelles  les  segments  ELF  de  l'objet  sont
       charges.

       #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),
       feature_test_macros(7), ld.so(8) et << Executable  and  Linking  Format
       Specification >> disponible en ligne a divers endroits.

COLOPHON

       Cette  page  fait  partie  de  la  publication 3.27 du projet man-pages
       Linux. Une description du projet et des instructions pour signaler  des
       anomalies       peuvent       etre       trouvees      a      l'adresse
       <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

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

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

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

       Vous  pouvez  toujours avoir acces a la version anglaise de ce document
       en utilisant la commande << man -L C <section> <page_de_man> >>.