getauxval - Récupérer une valeur du vecteur auxiliaire
Bibliothèque C standard (
libc,
-lc)
#include <sys/auxv.h>
unsigned long getauxval(unsigned long type);
La fonction
getauxval() récupère des valeurs du vecteur
auxiliaire, un mécanisme que le chargeur de binaires ELF du noyau
utilise pour passer certains renseignements à l'espace utilisateur
quand un programme est exécuté.
Toutes les entrées du vecteur auxiliaire sont des paires de
valeurs : un type qui identifie ce que l'entrée
représente et une valeur pour ce type. En fonction de l'argument
type,
getauxval() renvoie la valeur correspondante.
Les valeurs renvoyées pour tous les
types sont données dans
la liste suivante. Les différentes valeurs de
type ne sont pas
toutes présentes sur toutes les architectures.
- AT_BASE
- L'adresse de base de l'interpréteur du programme
(l'éditeur de liens dynamiques en général).
- AT_BASE_PLATFORM
- Un pointeur vers une chaîne (PowerPC et MIPS
seulement). Sur PowerPC, cette chaîne identifie la plateforme
réelle et elle peut être différente de
AT_PLATFORM. Sur MIPS, elle identifie le niveau ISA (depuis
Linux 5.7).
- AT_CLKTCK
- La fréquence utilisée par times(2)
pour compter. Cette valeur peut aussi être obtenue avec
sysconf(_SC_CLK_TCK).
- AT_DCACHEBSIZE
- La taille du bloc de cache de données.
- AT_EGID
- Le GID effectif du thread.
- AT_ENTRY
- L'adresse d'entrée de l'exécutable.
- AT_EUID
- L'UID effectif du thread.
- AT_EXECFD
- Le descripteur de fichier du programme.
- AT_EXECFN
- Un pointeur vers une chaîne contenant le nom de
chemin utilisé pour exécuter le programme.
- AT_FLAGS
- Drapeaux (inutilisé).
- AT_FPUCW
- Le mot de contrôle de FPU utilisé
(architecture SuperH seulement). Cette information donne quelques
renseignements sur l'initialisation FPU réalisée par le
noyau.
- AT_GID
- Le GID réel du thread.
- AT_HWCAP
- Un masque de bits, dépendant de l'architecture et de
l'ABI, qui précise les capacités détaillées du
processeur. Le contenu du masque de bits dépend du matériel
(consultez par exemple le fichier arch/x86/include/asm/cpufeature.h
des sources du noyau pour obtenir des précisions sur l'architecture
x86 ; la valeur renvoyée est le premier mot sur
32 bits du tableau qui y est décrit). Une version
humainement lisible des mêmes renseignements est disponible dans
/proc/cpuinfo.
-
AT_HWCAP2 (depuis la glibc 2.18)
- Autres indications dépendant de la machine à
propos des capacités du processeur.
- AT_ICACHEBSIZE
- La taille du bloc de cache d'instructions.
- AT_L1D_CACHEGEOMETRY
- La géométrie du cache de données L1
codée avec la taille d'une ligne de cache en octets dans les
16 bits inférieurs et l'associativité du cache dans
les 16 bits suivants. L'associativité est telle que si N est
la valeur sur 16 bits, le cache est associatif par ensembles de
N blocs.
- AT_L1D_CACHESIZE
- La taille du cache de données L1.
- AT_L1I_CACHEGEOMETRY
- La géométrie du cache d'instructions L1
codée de la même manière que
AT_L1D_CACHEGEOMETRY.
- AT_L1I_CACHESIZE
- La taille du cache d'instructions L1.
- AT_L2_CACHEGEOMETRY
- La géométrie du cache L2 codée de la
même manière que AT_L1D_CACHEGEOMETRY.
- AT_L2_CACHESIZE
- La taille du cache L2.
- AT_L3_CACHEGEOMETRY
- La géométrie du cache L3 codée de la
même manière que AT_L1D_CACHEGEOMETRY.
- AT_L3_CACHESIZE
- La taille du cache L3.
- AT_PAGESZ
- La taille de page du système (la même valeur
que celle renvoyée par sysconf(_SC_PAGESIZE)).
- AT_PHDR
- L'adresse des en-têtes du programme de
l'exécutable.
- AT_PHENT
- La taille de l'entrée des en-têtes du
programme.
- AT_PHNUM
- Le nombre d'en-têtes du programme.
- AT_PLATFORM
- Un pointeur vers une chaîne qui identifie la
plate-forme matérielle sur laquelle le programme est
exécuté. L'éditeur de liens dynamiques utilise cette
chaîne dans l'interprétation des valeurs rpath.
- AT_RANDOM
- L'adresse de seize octets contenant une valeur
aléatoire.
- AT_SECURE
- Cet attribut possède une valeur non nulle si
l'exécutable doit être traité de façon
sécurisée. Le plus souvent, une valeur non nulle indique que
le processus exécute un binaire set-user-ID ou set-group-ID (si
bien que ses UID ou GID réels et effectifs sont différents)
ou qu'il acquiert des capacités
(« capabilities ») en exécutant un
fichier binaire qui possède des capacités (voir
capabilities(7)) ; sinon, une valeur non nulle pourrait
être attribuée par un module de sécurité
Linux. Quand cette valeur est non nulle, l'éditeur de liens
dynamiques désactive l'utilisation de certaines variables
d'environnement (consultez ld-linux.so(8)) et la glibc modifie
d'autres facettes de son comportement (consultez aussi
secure_getenv(3)).
- AT_SYSINFO
- Le point d'entrée vers la fonction d'appel
système dans le vDSO. N'est ni présent ni nécessaire
sur toutes les architectures (par exemple absent sur x86-64).
- AT_SYSINFO_EHDR
- L'adresse d'une page contenant le vDSO (objet
partagé dynamique virtuel, « virtual dynamic shared
object ») que le noyau crée pour fournir des
implémentations rapides de certains appels systèmes.
- AT_UCACHEBSIZE
- La taille du bloc de cache unifié.
- AT_UID
- L'UID réel du thread.
Si elle réussit,
getauxval() renvoie la valeur correspondant au
type. Si
type n'est pas trouvé, la valeur renvoyée
est
0.
-
ENOENT (depuis la glibc 2.19)
- Aucune entrée correspondant au type n'a pu
être trouvée dans le vecteur auxiliaire.
La fonction
getauxval() est disponible depuis la glibc 2.16.
Pour une explication des termes utilisés dans cette section, consulter
attributes(7).
Interface |
Attribut |
Valeur |
getauxval() |
Sécurité des threads |
MT-Safe |
Cette fonction est une extension non normalisée de la glibc.
Le principal utilisateur des renseignements du vecteur auxiliaire est
l'éditeur de liens dynamiques
ld-linux.so(8). Le vecteur
auxiliaire est un raccourci pratique et efficace qui permet au noyau de
communiquer un certain jeu de renseignements standards dont l'éditeur
de liens a souvent ou toujours besoin. Dans certains cas, les mêmes
renseignements pourraient être obtenus à l'aide d'appels
système, mais l'utilisation du vecteur auxiliaire est moins
coûteuse.
Le vecteur auxiliaire réside juste au-dessus de la liste d'arguments et
de l'environnement dans l'espace d'adresse du processus. Le vecteur auxiliaire
fourni à un programme peut être affiché en
définissant la variable d'environnement
LD_SHOW_AUXV lors de
l'exécution d'un programme :
$ LD_SHOW_AUXV=1 sleep 1
Le vecteur auxiliaire de n'importe quel processus peut (en fonction des droits
du fichier) être obtenu dans
/proc/[pid]/auxv. Consultez
proc(5) pour obtenir de plus amples renseignements.
Avant l'ajout du code d'erreur
ENOENT à partir de la
glibc 2.19, il n'existait aucun moyen de distinguer sans
ambiguïté le cas où
type n'avait pas pu
être trouvé du cas où la valeur correspondant à
type était égale à zéro.
execve(2),
secure_getenv(3),
vdso(7),
ld-linux.so(8)
La traduction française de cette page de manuel a été
créée par Christophe Blaess
<
https://www.blaess.fr/christophe/>, Stéphan Rafin
<
[email protected]>, Thierry Vignaud
<
[email protected]>, François Micaux, Alain Portal
<
[email protected]>, Jean-Philippe Guérard
<
[email protected]>, Jean-Luc Coulon (f5ibh)
<
[email protected]>, Julien Cristau
<
[email protected]>, Thomas Huriaux <
[email protected]>,
Nicolas François <
[email protected]>, Florentin
Duneau <
[email protected]>, Simon Paillard
<
[email protected]>, Denis Barbier
<
[email protected]>, David Prévot <
[email protected]> et
Lucien Gentis <
[email protected]>
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 à
[email protected]