Provided by:
manpages-fr-dev_3.27fr1.4-1_all 
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> >>.