Man page - dlinfo(3)

Packages contains this manual

Available languages:

en fr ru

Manual

dlinfo

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ATTRIBUTS
VERSIONS
STANDARDS
HISTORIQUE
EXEMPLES
Source du programme
VOIR AUSSI
TRADUCTION

NOM

dlinfo - Obtenir des informations sur un objet chargé dynamiquement

BIBLIOTHÈQUE

BibliothĂšque de liens dynamiques ( libc , -lc )

SYNOPSIS

#define _GNU_SOURCE
#include <link.h>
#include <dlfcn.h>

int dlinfo(void *restrict handle , int request , void *restrict info );

DESCRIPTION

La fonction dlinfo () obtient des informations sur l’objet chargĂ© dynamiquement et rĂ©fĂ©rencĂ© par handle (habituellement obtenu par un appel prĂ©alable Ă  dlopen (3) ou dlmopen (3)). Le paramĂštre request spĂ©cifie quelle information doit ĂȘtre renvoyĂ©e. Le paramĂštre info est un pointeur vers un tampon utilisĂ© pour stocker les informations renvoyĂ©es par l’appel ; le type de ce paramĂštre dĂ©pend de request .

Les valeurs suivantes sont prises en charge pour request (avec le type correspondant pour info entre parenthÚses) :
RTLD_DI_LMID
( Lmid_t * )

RĂ©cupĂ©rer l’identifiant de la liste d’association des liens (espace de noms) dans lequel handle est chargĂ©.

RTLD_DI_LINKMAP ( struct link_map ** )

RécupÚrer un pointeur vers la structure link_map correspondant à handle . Le paramÚtre info pointe vers un pointeur sur une structure link_map , définie dans <link.h> comme :

struct link_map {
ElfW(Addr) l_addr; /* Difference entre l’adresse
dans le fichier ELF et
l’adresse en mĂ©moire */
char *l_name; /* Chemin absolu du fichier oĂč
l’objet a Ă©tĂ© trouvĂ© */
ElfW(Dyn) *l_ld; /* La section dynamique de l’objet
partagé */
struct link_map *l_next, *l_prev;
/* Chaßne des objets chargés */
/* Plus des champs supplémentaires privés
de l’implementation */
};

RTLD_DI_ORIGIN ( char * )

Copie le chemin du fichier de l’objet partĂ©gĂ© correspondant Ă  handle vers l’endroit pointĂ© vers info .

RTLD_DI_SERINFO ( Dl_serinfo * )

Obtient les chemins de recherche de bibliothĂšques pour un objet partagĂ© indiquĂ© par handle . L’argument info est un pointeur vers un Dl_serinfo qui contient les chemins de recherche. Parce que le nombre de chemins de recherche peut varier, la taille de la structure sur laquelle info pointe peut aussi varier. La requĂȘte RTLD_DI_SERINFOSIZE dĂ©crite ci-dessous permet aux applications de dĂ©terminer convenablement la taille du tampon. L’appelant doit effectur les Ă©tapes suivantes :

(1)

Utiliser une requĂȘte RTLD_DI_SERINFOSIZE pour renseigner une structure Dl_serinfo avec la taille ( dls_size ) de la structure requise pour la requĂȘte RTLD_DI_SERINFO ultĂ©rieure.

(2)

Allouer un tampon Dl_serinfo de la bonne taille ( dls_size ).

(3)

Utiliser un requĂȘte RTLD_DI_SERINFOSIZE pour remplir les champs dls_size et dls_cnt du tampon allouĂ© Ă  l’étape prĂ©cĂ©dante.

(4)

Utiliser un RTLD_DI_SERINFO pour obtenir les chemins de recherche de bibliothĂšques.

La structure Dl_serinfo est définie comme suit :

typedef struct {
size_t dls_size; /* Taille en octets du
tampon entier */
unsigned int dls_cnt; /* Nombre d’élĂ©ments
dans 'dls_serpath' */
Dl_serpath dls_serpath[1]; /* En fait plus long,
'dls_cnt' éléments */
} Dl_serinfo;

Chacun des éléments dls_serpath dans la structure ci-dessus sont structurés sous la forme suivantes :

typedef struct {
char *dls_name; /* Nom du répertoire de recherche
de chemin de bibliothĂšque */
unsigned int dls_flags; /* Indique d’oĂč ce
répertoire provient */
} Dl_serpath;

Le champ dls_flags n’est pas utilisĂ© pour le moment et contient toujours zĂ©ro.

RTLD_DI_SERINFOSIZE ( Dl_serinfo * )

Renseigne les champs dls_size et dls_cnt de la structure Dl_serinfo sur laquelle pointe info avec des valeurs appropriĂ©es pour allouer un tampon pouvant ĂȘtre utilisĂ© dans une requĂȘte RTLD_DI_SERINFO ultĂ©rieure.

RTLD_DI_TLS_MODID ( size_t * , depuis la version 2.4 de la glibc)

Obtient l’identifiant de module du segment TLS (stockage local au thread) de l’objet partagĂ©, comme utilisĂ© dans les relocalisations TLS. Si cet objet ne dĂ©finit pas de segment TLS, zĂ©ro est mis dans *info .

RTLD_DI_TLS_DATA ( void ** , depuis la version 2.4 de la glibc)

Obtenir un pointeur au bloc TLS du thread appelant correspondant au segment TLS des objets partagés. Si cet objet ne définit pas un segment PT_TLS, ou si le thread appelant ne lui a pas alloué de bloc, NULL est placé dans *info .

VALEUR RENVOYÉE

En cas de succĂšs, dlinfo () renvoie 0 . En cas d’erreur, elle renvoie -1 ; la cause de l’erreur peut ĂȘtre diagnostiquĂ©e avec dlerror (3).

ATTRIBUTS

Pour une explication des termes utilisés dans cette section, consulter attributes (7).

Image grohtml-3896238-1.png

VERSIONS

Les ensembles de requĂȘtes prises en charge par les diverses implĂ©mentations ne se recouvrent que partiellement.

STANDARDS

GNU.

HISTORIQUE

glibc 2.3.3. Solaris.

EXEMPLES

Le programme ci-dessous ouvre un objet partagĂ© en utilisant dlopen (3) et utilise par la suite les requĂȘtes RTLD_DI_SERINFOSIZE et RTLD_DI_SERINFO pour obtenir la liste de chemin de recherche de bibliothĂšques pour la bibliothĂšque. Voici un exemple de ce qui pourrait ĂȘtre observĂ© lors de l’exĂ©cution du programme :

$ ./a.out /lib64/libm.so.6
dls_serpath[0].dls_name = /lib64
dls_serpath[1].dls_name = /usr/lib64

Source du programme

#define _GNU_SOURCE
#include <dlfcn.h>
#include <link.h>
#include <stdio.h>
#include <stdlib.h>
int
main(int argc, char *argv[])
{
void *handle;
Dl_serinfo serinfo;
Dl_serinfo *sip;
if (argc != 2) {
fprintf(stderr, "Utilisation : %s <libpath>\n", argv[0]);
exit(EXIT_FAILURE);
}
/* Obtenir un gestionnaire pour l’objet partagĂ© indiquĂ© sur la
ligne de commande. */
handle = dlopen(argv[1], RTLD_NOW);
if (handle == NULL) {
fprintf(stderr, "dlopen() failed: %s\n", dlerror());
exit(EXIT_FAILURE);
}
/* DĂ©couvrir la taille du tampon qu’il faut passer Ă 
RTLD_DI_SERINFO. */
if (dlinfo(handle, RTLD_DI_SERINFOSIZE, &serinfo) == -1) {
fprintf(stderr, "RTLD_DI_SERINFOSIZE failed: %s\n", dlerror());
exit(EXIT_FAILURE);
}
/* Allouer le tampon pour l’utiliser avec RTLD_DI_SERINFO. */
sip = malloc(serinfo.dls_size);
if (sip == NULL) {
perror("malloc");
exit(EXIT_FAILURE);
}
/* Initialiser les champs 'dls_size' et 'dls_cnt'
dans le tampon nouvellement alloué. */
if (dlinfo(handle, RTLD_DI_SERINFOSIZE, sip) == -1) {
fprintf(stderr, "RTLD_DI_SERINFOSIZE failed: %s\n", dlerror());
exit(EXIT_FAILURE);
}
/* Récupérer et afficher la liste de recherche des bibliothÚques. */
if (dlinfo(handle, RTLD_DI_SERINFO, sip) == -1) {
fprintf(stderr, "RTLD_DI_SERINFO failed: %s\n", dlerror());
exit(EXIT_FAILURE);
}
for (size_t j = 0; j < serinfo.dls_cnt; j++)
printf("dls_serpath[%zu].dls_name = %s\n",
j, sip->dls_serpath[j].dls_name);
exit(EXIT_SUCCESS);
}

VOIR AUSSI

dl_iterate_phdr (3), dladdr (3), dlerror (3), dlopen (3), dlsym (3), ld.so (8)

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et Grégoire Scano <gregoire.scano@malloc.fr>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n’y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org .