.\" -*- coding: UTF-8 -*- '\" t .\" Copyright (C) 2015 Michael Kerrisk .\" and Copyright (C) 2008 Petr Baudis (dladdr caveat) .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH dladdr 3 "20 juillet 2023" "Pages du manuel de Linux 6.05.01" .SH NOM dladdr, dladdr1 \- Traduire les adresses en informations symboliques .SH BIBLIOTHÈQUE Bibliothèque de liens dynamiques (\fIlibdl\fP, \fI\-ldl\fP) .SH SYNOPSIS .nf \fB#define _GNU_SOURCE\fP \fB#include \fP .PP \fBint dladdr(const void *\fP\fIaddr\fP\fB, Dl_info *\fP\fIinfo\fP\fB);\fP \fBint dladdr1(const void *\fP\fIaddr\fP\fB, Dl_info *\fP\fIinfo\fP\fB, void **\fP\fIextra_info\fP\fB,\fP \fB int \fP\fIflags\fP\fB);\fP .fi .SH DESCRIPTION La fonction \fBdladdr\fP() détermine si l'adresse spécifiée dans \fIaddr\fP est située dans l'un des objets partagés chargés par l'application appelante. Si c'est le cas, alors \fBdladdr\fP() renvoie des informations sur l'objet partagé et le symbole qui recouvrent \fIaddr\fP. Cette information est renvoyée dans une structure \fIDl_info\fP\ : .PP .in +4n .EX typedef struct { const char *dli_fname; /* Chemin du fichier de l'objet partagé contenant l'adresse */ void *dli_fbase; /* Adresse de base à laquelle l'objet partagé est chargé */ const char *dli_sname; /* Nom du symbole dont la définition recouvre \fIaddr\fP */ void *dli_saddr; /* Adresse exacte du symbole dont le nom est \fIdli_sname\fP */ } Dl_info; .EE .in .PP Si aucun symbole correspondant à l'adresse \fIaddr\fP ne peut être trouvé, \fIdli_sname\fP et \fIdli_saddr\fP sont définis à NULL. .PP La fonction \fBdladdr1\fP() est comme \fBdladdr\fP() mais renvoie des informations additionnelles au moyen du paramètre \fIextra_info\fP. Les informations renvoyées dépendent de la valeur spécifiée dans \fIflags\fP et qui peut avoir l'une des valeurs suivantes\ : .TP \fBRTLD_DL_LINKMAP\fP Obtient un pointeur vers la table d'association de liens pour le fichier correspondant. Le paramètre \fIextra_info\fP pointe vers un pointeur sur une structure \fIlink_map\fP (c'est\-à\-dire \fIstruct link_map\~**\fP), définie dans \fI\fP comme\ : .IP .in +4n .EX struct link_map { ElfW(Addr) l_addr; /* Différence 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'implémentation */ }; .EE .in .TP \fBRTLD_DL_SYMENT\fP Obtenir un pointeur vers une entrée de la table de symboles ELF du symbole correspondant. Le paramètre \fIextra_info\fP est un pointeur vers un pointeur sur un symbole\ : \fIconst ElfW(Sym)**\fP. La macro \fIElfW\fP() convertit son paramètre en un nom de type de données ELF adapté à l'architecture matérielle. Par exemple, sur un système 64\ bits, \fIElfW(Sym)\fP produit le type de données nommé \fIElf64_Sym\fP qui est défini dans \fI\fP comme\ : .IP .in +4n .EX typedef struct { Elf64_Word st_name; /* Nom du symbole */ unsigned char st_info; /* Type et lien du symbole */ unsigned char st_other; /* Visibilité du symbole */ Elf64_Section st_shndx; /* Index de section */ Elf64_Addr st_value; /* Valeur du symbole */ Elf64_Xword st_size; /* Taille du symbole */ } Elf64_Sym; .EE .in .IP Le champ \fIst_name\fP est un index dans la table de chaînes. .IP Le champ \fIst_info\fP encode le type et le lien du symbole. Le type peut être extrait en utilisant la macro \fBELF64_ST_TYPE\fP(st_info) (ou \fBELF32_ST_TYPE()\fP sur les plateformes 32\ bits) qui retourne une des valeurs suivantes\ : .in +4n .TS lb lb lb l. Valeur Description STT_NOTYPE Le type de ce symbole n'est pas défini STT_OBJECT Ce symbole est associé à un objet de données STT_FUNC Ce symbole est associé à un objet de code STT_SECTION Ce symbole est associé à une section STT_FILE Le nom de ce symbole est un nom de fichier STT_COMMON Ce symbole est un objet de données commun STT_TLS Ce symbole est un objet de données local au thread STT_GNU_IFUNC Ce symbole est un objet de code indirect .TE .in .IP La correspondance de symbole peut être extraite du champ \fIst_info\fP en utilisant la macro \fBELF64_ST_BIND(st_info)\fP (ou \fBELF32_ST_BIND()\fP sur les plateformes 32\ bits) et renvoie l'une des valeurs suivantes\ : .in +4n .TS lb lb lb l. Valeur Description STB_LOCAL Symbole local STB_GLOBAL Symbole global STB_WEAK Symbole faible STB_GNU_UNIQUE Symbole unique .TE .in .IP Le champ \fIst_other\fP contient la visibilité du symbole qui peut être extraite en utilisant la macro \fBELF64_ST_VISIBILITY(st_info)\fP (ou \fBELF32_ST_VISIBILITY()\fP sur les plateformes 32\ bits) et renvoie une des valeurs suivantes\ : .in +4n .TS lb lb lb l. Valeur Description STV_DEFAULT Règles de visibilité par défaut du symbole STV_INTERNAL Classe cachée spécifique au processeur STV_HIDDEN Le symbole n'est pas disponible dans d'autres modules STV_PROTECTED Non préemptible, non exporté .TE .in .SH "VALEUR RENVOYÉE" En cas de succès, ces fonctions renvoient une valeur non nulle. Si l'adresse spécifiée dans \fIaddr\fP peut être mise en correspondance avec un objet partagé, mais pas vers un symbole dans l'objet partagé, alors les champs \fIinfo\->dli_sname\fP et \fIinfo\->dli_saddr\fP sont mis à NULL. .PP .\" According to the FreeBSD man page, dladdr1() does signal an .\" error via dlerror() for this case. Si l'adresse spécifiée dans \fIaddr\fP ne peut pas être mise en correspondance avec l'objet partagé, alors ces fonctions renvoient \fB0\fP. Dans ce cas, \fIaucun\fP message d'erreur n'est disponible avec \fBdlerror\fP(3). .SH ATTRIBUTS Pour une explication des termes utilisés dans cette section, consulter \fBattributes\fP(7). .TS allbox; lbx lb lb l l l. Interface Attribut Valeur T{ .na .nh \fBdladdr\fP(), \fBdladdr1\fP() T} Sécurité des threads MT\-Safe .TE .sp 1 .SH STANDARDS GNU. .SH HISTORIQUE .TP \fBdladdr\fP() glibc 2.0. .TP \fBdladdr1\fP() glibc 2.3.3. .PP Solaris. .SH BOGUES Quelquefois, les pointeurs de fonction passés à \fBdladdr\fP() peuvent vous surprendre. Sur certaines architectures (notablement i386 et x86_64), \fIdli_fname\fP et \fIdli_fbase\fP peuvent au final pointer sur l'objet depuis lequel vous appelez \fBdladdr\fP(), même si la fonction utilisée en paramètre devrait provenir d'une bibliothèque liée dynamiquement. .PP Le problème est que le pointeur de fonction ne sera résolu que lors de la compilation, mais pointe simplement vers la section de l'objet original \fIplt\fP (table de procédure d'édition des liens) qui redirige l'appel après avoir demandé à l'éditeur dynamique de liens de résoudre le symbole. Un contournement consiste à compiler le code pour qu'il soit indépendant de son adressage\ : dans ce cas le compilateur ne peut pas préparer le pointeur à la compilation et \fBgcc\fP(1) générera du code qui chargera juste l'adresse finale du symbole depuis la table \fIGOT\fP (table d'offset globale) lors de l'exécution, avant de la passer à \fBdladdr\fP(). .SH "VOIR AUSSI" \fBdl_iterate_phdr\fP(3), \fBdlinfo\fP(3), \fBdlopen\fP(3), \fBdlsym\fP(3), \fBld.so\fP(8) .PP .SH TRADUCTION La traduction française de cette page de manuel a été créée par Christophe Blaess , Stéphan Rafin , Thierry Vignaud , François Micaux, Alain Portal , Jean-Philippe Guérard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas François , Florentin Duneau , Simon Paillard , Denis Barbier , David Prévot et Grégoire Scano . .PP Cette traduction est une documentation libre ; veuillez vous reporter à la .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License version 3 .UE concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE. .PP Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à .MT debian-l10n-french@lists.debian.org .ME .