Provided by: manpages-fr_4.27.0-1_all 

NOM
elf – Format des fichiers exécutables ELF (« Executable and Linking Format »)
SYNOPSIS
#include <elf.h>
DESCRIPTION
Le fichier d'en-tête <elf.h> définit le format des fichiers binaires exécutables ELF. Ces fichiers
peuvent être soit des fichiers exécutables normaux, des fichiers objets repositionnables, des fichiers
core ou des objets partagés.
Un fichier exécutable utilisant le format de fichier ELF est constitué d'un en-tête ELF, suivi d'une
table d'en-tête de programme ou d'une table des en-têtes de sections, ou des deux. L'en-tête ELF est
toujours situé à un déplacement de zéro par rapport au début du fichier. Les déplacements dans le fichier
des tables d'en-tête de programme et des en-têtes de sections sont définis dans l'en-tête ELF. Ces deux
tables décrivent le reste des particularités du fichier.
Ce fichier d'en-tête décrit, sous la forme de structures C, les en-têtes mentionnés précédemment et
inclut également des structures pour les sections dynamiques, les sections de repositionnement et les
tables de symboles.
Types de base
Les types suivants sont utilisés pour les architectures N-bit (avec N=32,64 ; ElfN signifie Elf32 ou
Elf64 ; uintN_t signifie uint32_t ou uint64_t) :
ElfN_Addr adresse (non signée) du programme, uintN_t
ElfN_Off déplacement (non signé) dans le fichier, uintN_t
ElfN_Section indice (non signé) de section, uint16_t
ElfN_Versym informations (non signées) sur les versions
des symboles, uint16_t
Elf_Byte caractère (char) non signé
ElfN_Half uint16_t
ElfN_Sword int32_t
ElfN_Word uint32_t
ElfN_Sxword int64_t
ElfN_Xword uint64_t
(Note : la terminologie *BSD est quelque peu différente. Elf64_Half est deux fois plus grand que
Elf32_Half et Elf64Quarter est utilisé pour uint16_t. Afin d'éviter toute confusion, ces types seront
remplacés par des types plus explicites dans la suite de ce document.)
Toutes les structures de données définies par le format de fichier suivent la taille « naturelle » et les
principes d'alignement de la classe correspondante. Si nécessaire, les structures de données contiennent
un remplissage explicite pour assurer l'alignement sur 4 octets des objets de 4 octets et pour forcer les
tailles des structures à être des multiples de 4, etc.
En-tête ELF (Ehdr)
L'en-tête ELF est décrit par le type Elf32_Ehdr ou par le type Elf64_Ehdr :
#define EI_NIDENT 16
typedef struct {
unsigned char e_ident[EI_NIDENT];
uint16_t e_type;
uint16_t e_machine;
uint32_t e_version;
ElfN_Addr e_entry;
ElfN_Off e_phoff;
ElfN_Off e_shoff;
uint32_t e_flags;
uint16_t e_ehsize;
uint16_t e_phentsize;
uint16_t e_phnum;
uint16_t e_shentsize;
uint16_t e_shnum;
uint16_t e_shstrndx;
} ElfN_Ehdr;
Les champs ont les significations suivantes :
e_ident
Ce tableau d'octets indique comment interpréter le fichier, indépendamment du processeur ou du
reste du contenu du fichier. Dans ce tableau, chacun des éléments s'appelle une macro qui commence
par le préfixe EI_ et peut contenir des valeurs commençant par le préfixe ELF. Les macros
suivantes sont définies :
EI_MAG0
Premier octet du nombre magique. Il doit être rempli par ELFMAG0 (0: 0x7f).
EI_MAG1
Deuxième octet du nombre magique. Il doit être rempli par ELFMAG1 (1: « E »).
EI_MAG2
Troisième octet du nombre magique. Il doit être rempli par ELFMAG2 (2: « L »).
EI_MAG3
Quatrième octet du nombre magique. Il doit être rempli par ELFMAG3 (3: « F »).
EI_CLASS
Le cinquième octet indique l'architecture pour ce binaire :
ELFCLASSNONE Cette classe n'est pas valable.
ELFCLASS32 Cela définit une architecture 32 bits. Elle permet d'utiliser des machines
avec des espaces d'adressage virtuel et des fichiers d'une taille allant
jusqu'à 4 gigaoctets.
ELFCLASS64 Cela définit une architecture 64 bits.
EI_DATA
Le sixième octet indique le codage utilisé pour les données de ce fichier spécifiques au
processeur. Actuellement, les codages suivants sont gérés :
ELFDATANONE Format de données inconnu.
ELFDATA2LSB Complément à deux, petit boutiste.
ELFDATA2MSB Complément à deux, gros boutiste.
EI_VERSION
Le 7e octet est le numéro de version de la spécification du format ELF :
EV_NONE Version non valable.
EV_CURRENT Version actuelle.
EI_OSABI
Le 8e octet identifie le système d'exploitation et l'interface binaire des applications
(ABI) auxquels cet objet est destiné. Certains des champs d'autres structures ELF
contiennent des valeurs et des drapeaux dont la signification dépend de la plate-forme ;
l'interprétation de ces champs dépend de la valeur de cet octet. Par exemple :
ELFOSABI_NONE Identique à ELFOSABI_SYSV
ELFOSABI_SYSV ABI UNIX System V
ELFOSABI_HPUX ABI HP-UX
ELFOSABI_NETBSD ABI NetBSD
ELFOSABI_LINUX ABI Linux
ELFOSABI_SOLARIS ABI Solaris
ELFOSABI_IRIX ABI IRIX
ELFOSABI_FREEBSD ABI FreeBSD
ELFOSABI_TRU64 ABI UNIX TRU64
ELFOSABI_ARM ABI de l'architecture ARM
ELFOSABI_STANDALONE ABI autonome (embarqué)
EI_ABIVERSION
Le 9e octet identifie la version de l'interface binaire des applications (ABI) à laquelle
cet objet est destiné. Ce champ permet de différencier des versions incompatibles d'une
même ABI. L'interprétation de ce numéro de version dépend de l'ABI indiquée par le champ
EI_OSABI. Les applications respectant cette spécification utilisent la valeur 0.
EI_PAD Début de remplissage. Ces octets sont réservés et positionnés à zéro. Les programmes qui
les lisent ne doivent pas en tenir compte. La valeur de EI_PAD sera modifiée dans le futur
si l'on décide de donner une signification à des octets actuellement inutilisés.
EI_NIDENT
Taille du tableau e_ident.
e_type Ce membre de la structure identifie le type de fichier objet :
ET_NONE Type inconnu.
ET_REL Fichier repositionnable.
ET_EXEC Fichier exécutable.
ET_DYN Objet partagé.
ET_CORE Fichier core.
e_machine
Ce membre indique l'architecture nécessaire à un fichier particulier. Par exemple :
EM_NONE Machine inconnue
EM_M32 AT&T WE 32100
EM_SPARC Sun Microsystems SPARC
EM_386 Intel 80386
EM_68K Motorola 68000
EM_88K Motorola 88000
EM_860 Intel 80860
EM_MIPS MIPS RS3000 (uniquement gros-boutiste)
EM_PARISC HP/PA
EM_SPARC32PLUS SPARC avec jeu d'instructions étendu
EM_PPC PowerPC
EM_PPC64 PowerPC 64 bits
EM_S390 IBM S/390
EM_ARM Machines modernes de technologie RISC
EM_SH Renesas SuperH
EM_SPARCV9 SPARC v9 64 bits
EM_IA_64 Intel Itanium
EM_X86_64 AMD x86-64
EM_VAX DEC Vax
e_version
Ce membre indique la version du fichier :
EV_NONE Version non valable
EV_CURRENT Version actuelle
e_entry
Ce membre indique l'adresse virtuelle à laquelle le système transfère initialement le contrôle,
démarrant ainsi le processus. Si ce fichier ne comporte pas de point d'entrée, ce champ contient
zéro.
e_phoff
Ce membre contient le déplacement en octets de la table contenant l'en-tête de programme. Si ce
fichier ne comporte pas de table d'en-tête de programme, ce champ contient zéro.
e_shoff
Ce membre contient le déplacement en octets de la table des en-têtes de sections. Si ce fichier ne
comporte pas de table des en-têtes des sections, ce champ contient zéro.
e_flags
Ce membre contient des drapeaux spécifiques au processeur associés au fichier. Le nom de ces
drapeaux est de la forme EF_machine_drapeau. À l'heure actuelle, aucun drapeau n'a été défini.
e_ehsize
Ce membre contient la taille de l'en-tête ELF en octets.
e_phentsize
Ce membre contient la taille en octets d'une entrée de la table d'en-tête de programme ; toutes
les entrées sont de même taille.
e_phnum
Ce membre contient le nombre d'entrées de la table d'en-tête de programme. Ainsi, la taille en
octets de la table pourra être obtenue en multipliant e_phentsize par e_phnum. Si un fichier ne
comporte pas d'en-tête de programme, e_phnum contiendra la valeur zéro.
Si le nombre d'entrées de la table d'en-tête de programme est supérieur ou égal à PN_XNUM
(0xffff), ce membre contient PN_XNUM (0xffff) et le nombre réel d'entrées dans la table d'en-tête
de programme est stocké dans le membre sh_info de l'entrée initiale de la table des en-têtes de
sections. Dans le cas contraire, le membre sh_info de l'entrée initiale de la table des en-têtes
de sections contient la valeur zéro.
PN_XNUM
Ce nombre est défini comme 0xffff, le plus grand nombre que e_phnum peut valoir, qui
spécifie où le nombre réel d'en-têtes de programme est assigné.
e_shentsize
Ce membre contient la taille en octets d'un en-tête de section. Un en-tête de section est une
entrée de la table des en-têtes de sections ; toutes les entrées sont de même taille.
e_shnum
Ce membre contient le nombre d'entrées de la table des en-têtes de sections. Ainsi, la taille en
octets de la table des en-têtes de sections pourra être obtenue en multipliant e_shentsize par
e_shnum. Si un fichier ne comporte pas de table des en-têtes de sections, le champ e_shnum
contiendra zéro.
Si le nombre d'entrées de la table des en-têtes de sections est supérieur ou égal à SHN_LORESERVE
(0xff00), e_shnum contient la valeur zéro et le nombre réel d'entrées dans la table des en-têtes
de sections est stocké dans le membre sh_size de l'entrée initiale de la table des en-têtes de
sections. Dans le cas contraire, le membre sh_size de l'entrée initiale de la table des en-têtes
de sections contient la valeur zéro.
e_shstrndx
Ce membre contient l'indice dans la table des en-têtes de sections de l'entrée associée à la table
des chaînes de noms des sections. Si le fichier ne comporte pas de table des chaînes de noms des
sections, ce champ contiendra la valeur SHN_UNDEF.
Si l'indice de la section de la table des chaînes de noms des sections est supérieur ou égal à
SHN_LORESERVE (0xff00), ce membre contient la valeur SHN_XINDEX (0xffff) et l'indice réel de la
section de la table des chaînes de noms des sections est stocké dans le membre sh_link de l'entrée
initiale de la table des en-têtes de sections. Dans le cas contraire, le membre sh_link de
l'entrée initiale de la table des en-têtes de sections contient la valeur zéro.
En-tête de programme (Phdr)
La table d'en-tête de programme d'un exécutable ou d'un fichier objet partagé est un tableau de
structures, chacune d'entre elles décrivant un segment ou d'autres informations dont le système a besoin
pour préparer l'exécution du programme. Un segment de fichier objet contient une ou plusieurs sections.
L'en-tête de programme n'a de sens que pour les fichiers objets partagés ou les fichiers exécutables. Un
fichier indique la taille de son propre en-tête de programme à l'aide des membres e_phentsize et e_phnum
de l'en-tête ELF. Selon l'architecture, l'en-tête de programme ELF est représenté par un type Elf32_Phdr
ou un type Elf64_Phdr :
typedef struct {
uint32_t p_type;
Elf32_Off p_offset;
Elf32_Addr p_vaddr;
Elf32_Addr p_paddr;
uint32_t p_filesz;
uint32_t p_memsz;
uint32_t p_flags;
uint32_t p_align;
} Elf32_Phdr;
typedef struct {
uint32_t p_type;
uint32_t p_flags;
Elf64_Off p_offset;
Elf64_Addr p_vaddr;
Elf64_Addr p_paddr;
uint64_t p_filesz;
uint64_t p_memsz;
uint64_t p_align;
} Elf64_Phdr;
La principale différence entre l'en-tête d'un programme 32 bits et l'en-tête d'un programme 64 bits
repose sur l'emplacement du champ p_flags au sein de la structure complète.
p_type Ce membre de la structure indique le type de segment décrit par cet élément de tableau ou comment
interpréter ses informations.
PT_NULL
Cet élément du tableau est inutilisé et les valeurs des autres membres ne sont pas
définies. Cela permet à l'en-tête de programme de contenir des entrées qui ne sont pas
prises en compte.
PT_LOAD
Cet élément du tableau indique un segment chargeable, décrit par p_filesz et p_memsz.
Les octets du fichier sont projetés au début du segment mémoire. Si la taille mémoire du
segment p_memsz est plus grande que la taille du fichier p_filesz, les octets
« supplémentaires » sont définis comme contenant la valeur 0 et placés à la suite de la
zone initialisée du segment. La taille du fichier ne peut être supérieure à la taille de
la mémoire. Dans la table d'en-tête de programme, les entrées de segments chargeables
sont indiquées par ordre croissant, classées selon le membre p_vaddr.
PT_DYNAMIC
L'élément de tableau contient des informations de liaison dynamique.
PT_INTERP
L'élément de tableau contient l'emplacement et la taille du nom de chemin, terminé par
un octet NULL, utilisé pour invoquer l'interpréteur. Ce type de segment n'a de sens que
pour des fichiers exécutables (bien qu'il puisse être présent dans des objets partagés).
Il ne peut être présent qu'une seule fois dans un fichier. S'il est présent, il doit
précéder chaque entrée de segment chargeable.
PT_NOTE
L'élément de tableau spécifie l'emplacement de notes (ElfN_Nhdr).
PT_SHLIB
Ce type de segment est réservé, mais sa sémantique n'est pas définie. Les programmes
contenant un tel élément de tableau ne sont pas conformes à l'interface binaire (ABI).
PT_PHDR
L'élément de tableau, s'il est présent, contiendra l'emplacement et la taille de la
table d'en-tête de programme elle-même, à la fois dans le fichier et dans l'image
mémoire du programme. Ce type de segment ne peut être présent qu'une seule fois dans un
fichier. Qui plus est, il ne peut être présent que si l'en-tête de programme fait partie
de l'image mémoire du programme. S'il est présent, il doit précéder chaque entrée de
segment chargeable.
PT_LOPROC
PT_HIPROC
Les valeurs comprises dans la plage inclusive [PT_LOPROC, PT_HIPROC] sont réservées à
des sémantiques spécifiques au processeur.
PT_GNU_STACK
Extension GNU qui est utilisée par le noyau de Linux pour contrôler l'état de la pile à
l'aide de l'indicateur positionné dans le membre p_flags.
p_offset
Ce membre contient le déplacement du premier octet du segment par rapport au début du fichier.
p_vaddr
Ce membre contient l'adresse virtuelle à laquelle se trouve en mémoire le premier octet du
segment.
p_paddr
Sur les systèmes pour lesquels l'adresse physique est pertinente, ce membre est réservé pour
l'adresse physique du segment. Sous BSD, ce champ n'est pas utilisé et doit avoir la valeur zéro.
p_filesz
Ce membre contient la taille en octets dans l'image du fichier de ce segment. Il peut être égal à
zéro.
p_memsz
Ce membre contient la taille en octets de l'image mémoire de ce segment. Il peut être égal à zéro.
p_flags
Ce membre contient un masque de bits d'options relatives au segment :
PF_X Segment exécutable.
PF_W Segment accessible en écriture.
PF_R Segment accessible en lecture.
Un segment de texte est souvent affecté des drapeaux PF_X et PF_R. Un segment de données est
souvent affecté des drapeaux PF_W et PF_R.
p_align
Ce membre contient la valeur selon laquelle les segments sont alignés en mémoire et dans le
fichier. Pour des segments de processus chargeables, les valeurs p_vaddr et p_offset doivent être
congrues modulo la taille de la page. Des valeurs de zéro ou de un indiquent qu'aucun alignement
n'est nécessaire. Sinon, p_align doit être un nombre positif, puissance entière de deux, et
p_vaddr doit être égal à p_offset modulo p_align.
En-tête de section (Shdr)
La table des en-têtes de sections d'un fichier permet de retrouver toutes les sections du fichier. C'est
un tableau de structures Elf32_Shdr ou Elf64_Shdr. Le champ e_shoff de l'en-tête ELF donne son
déplacement en octets depuis le début du fichier. e_shnum contient le nombre d'entrées que contient la
table des en-têtes de sections. e_shentsize contient la taille en octets de chaque entrée.
Un indice de la table des en-têtes de sections est un indice de ce tableau. Certains de ces indices de
table des en-têtes de sections sont réservés : l'entrée initiale et toutes les entrées comprises entre
SHN_LORESERVE et SHN_HIRESERVE. L'entrée initiale est utilisée par des extensions ELF pour e_phnum,
e_shnum et e_shstrndx ; dans les autres cas, chaque champ de l'entrée initiale est mis à zéro. Un fichier
objet ne contient pas de section correspondant à ces indices spéciaux :
SHN_UNDEF
Cette valeur indique une référence de section non définie, manquante, non pertinente ou, d'une
manière ou d'une autre, sans signification.
SHN_LORESERVE
Cette valeur indique la borne inférieure de la plage des indices réservés.
SHN_LOPROC
SHN_HIPROC
Les valeurs supérieures dans la plage inclusive [SHN_LOPROC, SHN_HIPROC] sont réservées à des
sémantiques spécifiques au processeur.
SHN_ABS
Cette valeur définit la valeur absolue de la référence correspondante. Par exemple, un symbole
défini par rapport à la section numéro SHN_ABS a une valeur absolue et n'est pas affecté par un
repositionnement.
SHN_COMMON
Les symboles définis par rapport à cette section sont des symboles communs, comme des COMMON
Fortran ou des variables externes C non allouées.
SHN_HIRESERVE
Cette valeur indique la borne supérieure de la plage des indices réservés. Le système réserve les
indices compris entre SHN_LORESERVE et SHN_HIRESERVE, inclus. La table des en-têtes de sections ne
contient pas d'entrée pour les indices réservés.
L'en-tête de section a la structure suivante :
typedef struct {
uint32_t sh_name;
uint32_t sh_type;
uint32_t sh_flags;
Elf32_Addr sh_addr;
Elf32_Off sh_offset;
uint32_t sh_size;
uint32_t sh_link;
uint32_t sh_info;
uint32_t sh_addralign;
uint32_t sh_entsize;
} Elf32_Shdr;
typedef struct {
uint32_t sh_name;
uint32_t sh_type;
uint64_t sh_flags;
Elf64_Addr sh_addr;
Elf64_Off sh_offset;
uint64_t sh_size;
uint32_t sh_link;
uint32_t sh_info;
uint64_t sh_addralign;
uint64_t sh_entsize;
} Elf64_Shdr;
Il n'y a pas de réelle différence entre les en-têtes des sections 32 bits et 64 bits.
sh_name
Ce membre indique le nom de la section. Sa valeur est un indice de la table des chaînes des
en-têtes de sections, contenant l'emplacement d'une chaîne terminée par un octet NULL.
sh_type
Ce membre définit le contenu et la sémantique de la section.
SHT_NULL
Cette valeur indique que cet en-tête de section est inactif. Il n'est donc associé à aucune
section. Les valeurs des autres champs de l'en-tête de section ne sont pas définies.
SHT_PROGBITS
Cette section contient des informations définies par le programme, dont le format et le
sens ne sont déterminés que par celui-ci.
SHT_SYMTAB
Cette section contient une table de symboles. Typiquement, SHT_SYMTAB contient des symboles
pour l'édition de liens, bien qu'elle puisse aussi être utilisée pour la liaison dynamique.
Comme il s'agit d'une table de symboles complète, elle peut contenir de nombreux symboles
inutiles à la liaison dynamique. Un fichier objet peut aussi contenir une section
SHT_DYNSYM.
SHT_STRTAB
Cette section contient une table de chaînes. Un fichier objet peut contenir plusieurs
sections de ce type.
SHT_RELA
Cette section contient des entrées de repositionnement ayant des additifs explicites, par
exemple les entrées du type Elf32_Rela pour les fichiers objets 32 bits. Un objet peut
avoir plusieurs sections de ce type.
SHT_HASH
Cette section contient une table de hachage pour les symboles. Un objet participant à une
liaison dynamique doit en contenir une. Un fichier objet ne peut contenir qu'une seule
table de hachage.
SHT_DYNAMIC
Cette section contient les informations de liaison dynamique. Un fichier objet ne peut
contenir qu'une seule section dynamique.
SHT_NOTE
Cette section contient des notes (ElfN_Nhdr).
SHT_NOBITS
Une section de ce type ressemble à SHT_PROGBITS mais n'occupe pas d'espace dans le fichier.
Bien que cette section ne contienne aucun octet, le membre sh_offset contient son
déplacement théorique dans le fichier.
SHT_REL
Cette section contient des entrées de repositionnement sans additif explicite, par exemple
du type Elf32_Rel pour les fichiers objets de la classe de 32 bits. Un objet peut contenir
plusieurs sections de repositionnement.
SHT_SHLIB
Cette section est réservée et sa sémantique n'est pas définie.
SHT_DYNSYM
Cette section contient un jeu minimal de symboles de liaison dynamique. Un fichier objet
peut aussi contenir une section SHT_SYMTAB.
SHT_LOPROC
SHT_HIPROC
Les valeurs comprises dans la plage inclusive [SHT_LOPROC, SHT_HIPROC] sont réservées à des
sémantiques spécifiques au processeur.
SHT_LOUSER
Cette valeur indique la borne inférieure de la plage des indices réservés aux programmes
applicatifs.
SHT_HIUSER
Cette valeur indique la borne supérieure de la plage des indices réservés aux programmes
applicatifs. Les types de section entre SHT_LOUSER et SHT_HIUSER peuvent être utilisés par
l'application, sans que cela n'entre en conflit avec les types de section actuels ou futurs
définis par le système.
sh_flags
Les sections contiennent des indicateurs sous forme d'un bit décrivant divers attributs. Si, dans
sh_flags, le bit correspondant à un indicateur est positionné, l'attribut est « activé » pour
cette section. Sinon, l'attribut est « désactivé » ou ne s'applique pas. Les attributs non définis
sont mis à zéro.
SHF_WRITE
Cette section contient des données qu'il devrait être possible d'écrire durant l'exécution
du processus.
SHF_ALLOC
Cette section est présente en mémoire durant l'exécution du processus. Certaines sections
de contrôle ne sont pas présentes dans l'image mémoire d'un fichier objet. Cet attribut est
désactivé pour ces sections.
SHF_EXECINSTR
Cette section contient des instructions machine exécutables.
SHF_MASKPROC
Tous les bits contenus dans ce masque sont réservés à des sémantiques spécifiques au
processeur.
sh_addr
Si cette section apparaît dans l'image mémoire d'un processus, ce membre contient l'adresse à
laquelle le premier octet de la section doit se trouver. Sinon, ce membre contient zéro.
sh_offset
La valeur de ce membre indique le déplacement du premier octet de la section par rapport au début
du fichier. Une section de type SHT_NOBITS, n'occupe pas de place dans le fichier et son champ
sh_offset indique son emplacement théorique dans le fichier.
sh_size
Ce membre contient la taille en octets de la section. À moins que cette section ne soit de type
SHT_NOBITS, elle occupe sh_size octets dans le fichier. Une section de type SHT_NOBITS peut avoir
une taille différente de zéro, mais elle n'occupera cependant aucune place dans le fichier.
sh_link
Ce membre contient un lien vers un indice de la table des en-têtes de sections, son interprétation
dépend du type de section.
sh_info
Ce membre contient des informations complémentaires, son interprétation dépend du type de section.
sh_addralign
Certaines sections ont des contraintes d'alignement d'adresse. Si une section contient un mot
double, le système doit s'assurer que la section tout entière est alignée sur les mots doubles.
Autrement dit, la valeur de sh_addr doit être congrue à zéro modulo la valeur de sh_addralign.
Seules zéro ou des puissances entières positives de deux sont autorisés. Une valeur de zéro ou de
un indique qu'aucune contrainte d'alignement ne s'applique à la section.
sh_entsize
Certaines sections contiennent une table d'entrées de taille fixe, comme les tables de symboles.
Pour de telles sections, ce champ donne la taille en octets de chaque entrée. Ce membre contient
zéro si cette section ne contient pas une table de ce type.
Diverses sections contiennent des informations de contrôle et sur le programme :
.bss Cette section contient des données non initialisées qui contribuent à l'image mémoire du
programme. Par définition, le système initialise ces données avec des zéros lorsque le programme
démarre. Cette section est du type SHT_NOBITS. Les types de ses attributs sont SHF_ALLOC et
SHF_WRITE.
.comment
Cette section contient des informations de suivi des versions. Cette section est du type
SHT_PROGBITS. Aucun attribut n'est utilisé.
.ctors Cette section contient des pointeurs initialisés vers des constructeurs C++. Cette section est du
type SHT_PROGBITS. Les types de ses attributs sont SHF_ALLOC et SHF_WRITE.
.data Cette section contient des données initialisées qui contribuent à l'image mémoire du programme.
Elle est du type SHT_PROGBITS. Les types de ses attributs sont SHF_ALLOC et SHF_WRITE.
.data1 Cette section contient des données initialisées qui contribuent à l'image mémoire du programme.
Elle est du type SHT_PROGBITS. Les types de ses attributs sont SHF_ALLOC et SHF_WRITE.
.debug Cette section contient des données de débogage symbolique. Son contenu n'est pas précisé. Elle est
du type SHT_PROGBITS. Aucun type d'attribut n'est utilisé.
.dtors Cette section contient des pointeurs initialisés vers des destructeurs C++. Elle est du type
SHT_PROGBITS. Les types de ses attributs sont SHF_ALLOC et SHF_WRITE.
.dynamic
Cette section contient des informations de liaison dynamique. Les attributs de cette section
comprennent le bit SHF_ALLOC. Le positionnement du bit SHF_WRITE est spécifique au processeur.
Cette section est du type SHT_DYNAMIC. Voir ci-dessus pour les attributs.
.dynstr
Cette section contient les chaînes nécessaires à la liaison dynamique, le plus souvent les chaînes
représentant les noms associés aux entrées de la table des symboles. Cette section est du type
SHT_STRTAB. Le type d'attribut utilisé est SHF_ALLOC.
.dynsym
Cette section contient la table des symboles de liaison dynamique. Cette section est du type
SHT_DYNSYM. Le type d'attribut utilisé est SHF_ALLOC.
.fini Cette section contient des instructions exécutables qui font partie du code de fin du processus.
Lorsqu'un programme se termine normalement, le système organise l'exécution du code de cette
section. Elle est du type SHT_PROGBITS. Les attributs utilisés sont SHF_ALLOC et SHF_EXECINSTR.
.gnu.version
Cette section contient la table des symboles de version, un tableau d'éléments ElfN_Half. Cette
section est du type SHT_GNU_versym. Le type d'attribut utilisé est SHF_ALLOC.
.gnu.version_d
Cette section contient les définitions de version de symboles, une table de structures
ElfN_Verdef. Cette section est du type SHT_GNU_verdef. Le type d'attribut utilisé est SHF_ALLOC.
.gnu.version_r
Cette section contient la version de symbole des éléments nécessaires, une table de structures
ElfN_Verneed. Cette section est du type SHT_GNU_versym. Le type d'attribut utilisé est SHF_ALLOC.
.got Cette section contient la table globale des déplacements. Elle est du type SHT_PROGBITS. Les
attributs sont spécifiques au processeur.
.hash Cette section contient la table de hachage des symboles. Elle est du type SHT_HASH. L'attribut
utilisé est SHF_ALLOC.
.init Cette section contient des instructions exécutables qui font partie du code d'initialisation du
processus. Lorsqu'un programme démarre, le système organise l'exécution du code de cette section
avant d'appeler le point d'entrée principal du programme. Cette section est du type SHT_PROGBITS.
Les attributs utilisés sont SHF_ALLOC et SHF_EXECINSTR.
.interp
Cette section contient le chemin vers un interpréteur de programmes. Si le fichier comporte un
segment chargeable contenant cette section, les attributs de la section contiendront le bit
SHF_ALLOC. Sinon, ce bit sera désactivé. Cette section est du type SHT_PROGBITS.
.line Cette section contient des informations sur les numéros de lignes, qui seront utilisées pour le
débogage symbolique. Ces informations établissent la correspondance entre le code source du
programme et le code machine. Le contenu de cette section n'est pas spécifié. Cette section est du
type SHT_PROGBITS. Aucun attribut n'est utilisé.
.note Cette section contient diverses notes. Elle est du type SHT_NOTE. Aucun type d'attribut.
.note.ABI-tag
Cette section est utilisée pour déclarer l'ABI d'exécution attendue de l'image ELF. Elle peut
comprendre le nom du système d'exploitation et ses versions d'exécution. Cette section est du type
SHT_NOTE. Le seul attribut utilisé est SHF_ALLOC.
.note.gnu.build-id
Cette section est utilisée pour conserver un identifiant unique du contenu de l'image ELF.
Différents fichiers avec le même identifiant de construction pourraient contenir le même contenu
exécutable. Voir l'option --build-id de l'éditeur de liens GNU (ld(1)) pour plus de détails. Cette
section est du type SHT_NOTE. Le seul attribut utilisé est SHF_ALLOC.
.note.GNU-stack
Cette section est utilisée dans les fichiers objets de Linux pour déclarer les attributs de la
pile. Cette section est du type SHT_PROGBITS. Le seul attribut utilisé est SHF_EXECINSTR. Cela
indique à l'éditeur de liens GNU que le fichier objet requiert une pile exécutable.
.note.openbsd.ident
Les exécutables natifs d'OpenBSD contiennent en général une section .note.openbsd.ident leur
permettant de s'identifier afin que le noyau court-circuite, lors du chargement du fichier, tous
les tests de compatibilité de l'émulation binaire ELF.
.plt Cette section contient une table de liaison des procédures. Elle est du type SHT_PROGBITS. Ses
attributs sont spécifiques au processeur.
.relNOM
Cette section contient des informations de repositionnement, comme décrit ci-dessous. Si ce
fichier comporte un segment chargeable comprenant du repositionnement, les attributs de la section
contiendront le bit SHF_ALLOC. Sinon, ce bit sera désactivé. Par convention, le « NOM » est fourni
par la section à laquelle le repositionnement s'applique. Ainsi, une section de repositionnement
pour du .text s'appellera normalement .rel.text. Cette section est du type SHT_REL.
.relaNOM
Cette section contient des informations de repositionnement, comme décrit ci-dessous. Si ce
fichier comporte un segment chargeable comprenant du repositionnement, les attributs de la section
contiendront le bit SHF_ALLOC. Sinon, ce bit sera désactivé. Par convention, le « NOM » est fourni
par la section à laquelle le repositionnement s'applique. Ainsi, une section de repositionnement
pour du .text s'appellera normalement .rela.text. Cette section est du type SHT_RELA.
.rodata
Cette section contient des données en lecture seule, qui feront classiquement partie d'un segment
non accessible en écriture dans l'image du processus. Cette section est du type SHT_PROGBITS.
L'attribut utilisé est SHF_ALLOC.
.rodata1
Cette section contient des données en lecture seule, qui feront classiquement partie d'un segment
non accessible en écriture dans l'image du processus. Cette section est du type SHT_PROGBITS.
L'attribut utilisé est SHF_ALLOC.
.shstrtab
Cette section contient les noms des sections. Elle est du type SHT_STRTAB. Aucun type d'attribut.
.strtab
Cette section contient des chaînes, le plus souvent ces chaînes représentent les noms associés aux
entrées de la table des symboles. Si ce fichier comporte un segment chargeable comprenant la table
des chaînes de symboles, les attributs de la section contiendront le bit SHF_ALLOC. Sinon, ce bit
sera désactivé. Cette section est du type SHT_STRTAB.
.symtab
Cette section contient une table des symboles. Si ce fichier comporte un segment chargeable
contenant la table des symboles, les attributs de la section contiendront le bit SHF_ALLOC. Sinon,
ce bit sera désactivé. Cette section est du type SHT_SYMTAB.
.text Cette section contient le « texte », autrement dit les instructions exécutables, d'un programme.
Cette section est du type SHT_PROGBITS. Les attributs utilisés sont SHF_ALLOC et SHF_EXECINSTR.
Table des chaînes et des symboles
Les sections de tables de chaînes contiennent des séquences de caractères terminées par un octet NULL,
communément appelées chaînes. Le fichier objet utilise ces chaînes pour représenter les noms des symboles
et des sections. Une chaîne peut être vue comme un indice dans la section de table de chaînes. Le premier
octet, qui est l'indice zéro, est défini comme contenant un octet NULL(« \0 »). De même, le dernier octet
de la table de chaînes est défini comme contenant un octet NULL, ce qui assure que toutes les chaînes se
termineront bien par un octet NULL.
La table des symboles d'un fichier objet contient les informations permettant de localiser et de
repositionner les définitions et références symboliques d'un programme. Un indice dans une table de
symbole est un indice de ce tableau.
typedef struct {
uint32_t st_name;
Elf32_Addr st_value;
uint32_t st_size;
unsigned char st_info;
unsigned char st_other;
uint16_t st_shndx;
} Elf32_Sym;
typedef struct {
uint32_t st_name;
unsigned char st_info;
unsigned char st_other;
uint16_t st_shndx;
Elf64_Addr st_value;
uint64_t st_size;
} Elf64_Sym;
Les versions 32 bits et 64 bits comportent les mêmes membres, seul leur ordre diffère.
st_name
Ce membre contient un indice de la table des chaînes de symboles d'un fichier objet. Cette table
contient la représentation sous la forme de chaînes de caractères des noms des symboles. Si la
valeur de ce champ est différente de zéro, il représente l'indice de la table des chaînes qui
donne son nom au symbole. Sinon, le symbole n'a pas de nom.
st_value
Ce membre donne la valeur associée au symbole.
st_size
De nombreux symboles sont associés à des tailles. Ce champ contient zéro si le symbole n'a pas de
taille ou si sa taille est inconnue.
st_info
Ce membre indique le type de symbole et ses attributs de liaison :
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é à une fonction ou un autre code exécutable.
STT_SECTION
Ce symbole est associé à une section. Les entrées de ce type de la table des symboles
existent principalement pour le repositionnement et ont normalement des liaisons STB_LOCAL.
STT_FILE
Par convention, le nom de ce symbole donne le nom du fichier source associé au fichier
objet. Un symbole de ce type a des liaisons STB_LOCAL, son indice de section est SHN_ABS,
et, s'il est présent, il précède les autres symboles STB_LOCAL du fichier.
STT_LOPROC
STT_HIPROC
Les valeurs comprises dans la plage inclusive [STT_LOPROC, STT_HIPROC] incluse sont
réservées à des sémantiques spécifiques au processeur.
STB_LOCAL
Les symboles locaux ne sont pas visibles en dehors du fichier objet contenant leur
définition. Des symboles locaux de même nom peuvent exister dans plusieurs fichiers sans
interférer entre eux.
STB_GLOBAL
Les symboles globaux sont visibles de tous les fichiers objets devant être réunis. La
définition par un fichier d'un symbole global satisfera une référence non définie d'un
autre fichier à ce même symbole.
STB_WEAK
Les symboles faibles ressemblent à des symboles globaux, mais leur définition a une
priorité plus faible.
STB_LOPROC
STB_HIPROC
Les valeurs comprises dans la plage inclusive [STB_LOPROC, STB_HIPROC] incluse sont
réservées à des sémantiques spécifiques au processeur.
Il existe des macros permettant d”empaqueter et dépaqueter les champs de type et de liaison :
ELF32_ST_BIND(info)
ELF64_ST_BIND(info)
Extraire une liaison d'une valeur st_info.
ELF32_ST_TYPE(info)
ELF64_ST_TYPE(info)
Extraire un type d'une valeur st_info.
ELF32_ST_INFO(liaison, type)
ELF64_ST_INFO(liaison, type)
Convertir une liaison et un type en une valeur st_info.
st_other
Ce membre définit la visibilité du symbole.
STV_DEFAULT
Règles de visibilité des symboles par défaut. Les symboles globaux et les symboles faibles
sont disponibles pour d'autres modules ; les définitions dans d'autres modules peuvent
s'interposer dans les références du module local.
STV_INTERNAL
Classe cachée spécifique au processeur.
STV_HIDDEN
Le symbole n'est pas disponible pour d'autres modules ; les références du module local se
résolvent toujours dans le symbole local (c'est-à-dire les définitions des autres modules
ne peuvent s'interposer dans le symbole).
STV_PROTECTED
Le symbole est disponible pour d'autres modules, mais les références du module local se
résolvent toujours dans le symbole local.
Il existe des macros permettant d'extraire le type de visibilité :
ELF32_ST_VISIBILITY(autre) ou ELF64_ST_VISIBILITY(autre)
st_shndx
Chaque entrée de la table des symboles est « définie » en relation avec une section. Ce membre
contient l'indice correspondant de la table des en-têtes de sections.
Entrées de repositionnement (Rel et Rela)
Le repositionnement est le processus consistant à relier des références symboliques à des définitions
symboliques. Les fichiers repositionnables doivent contenir des informations décrivant comment modifier
le contenu de leurs sections, ce qui permet aux fichiers objets partagés et exécutables de détenir les
bonnes informations concernant l'image mémoire d'un programme. Les entrées de repositionnement sont ces
données.
Structures de repositionnement pour lesquelles un additif n'est pas nécessaire :
typedef struct {
Elf32_Addr r_offset;
uint32_t r_info;
} Elf32_Rel;
typedef struct {
Elf64_Addr r_offset;
uint64_t r_info;
} Elf64_Rel;
Structures de repositionnement pour lesquelles un additif est nécessaire :
typedef struct {
Elf32_Addr r_offset;
uint32_t r_info;
int32_t r_addend;
} Elf32_Rela;
typedef struct {
Elf64_Addr r_offset;
uint64_t r_info;
int64_t r_addend;
} Elf64_Rela;
r_offset
Ce membre donne l'emplacement où appliquer l'action de repositionnement. Pour un fichier
repositionnable, sa valeur est le déplacement en octets depuis le début de la section jusqu'à
l'unité de stockage affectée par le repositionnement. Pour un fichier exécutable ou un objet
partagé, sa valeur est l'adresse virtuelle de l'unité de stockage affectée par le
repositionnement.
r_info Ce membre donne à la fois l'indice de la table des symboles par rapport auquel on doit effectuer
le repositionnement et le type de repositionnement à appliquer. Les types de repositionnement
dépendent du processeur. Lorsque le texte mentionne le type de repositionnement ou l'indice de la
table des symboles d'une entrée de repositionnement, il s'agit du résultat de l'application de
ELF[32|64]_R_TYPE ou ELF[32|64]_R_SYM, respectivement, au champ r_info de cette entrée.
r_addend
Ce membre indique un additif constant pour le calcul de la valeur à stocker dans le champ
repositionnable.
Étiquettes dynamiques (Dyn)
La section .dynamic comporte une série de structures qui contiennent les informations relatives à
l'édition de liens dynamique. Le membre d_tag contrôle l'interprétation de d_un.
typedef struct {
Elf32_Sword d_tag;
union {
Elf32_Word d_val;
Elf32_Addr d_ptr;
} d_un;
} Elf32_Dyn;
extern Elf32_Dyn _DYNAMIC[];
typedef struct {
Elf64_Sxword d_tag;
union {
Elf64_Xword d_val;
Elf64_Addr d_ptr;
} d_un;
} Elf64_Dyn;
extern Elf64_Dyn _DYNAMIC[];
d_tag Ce membre peut prendre l'une des trois valeurs suivantes :
DT_NULL Indication de la fin de la section dynamique
DT_NEEDED Déplacement dans la table des chaînes vers le nom d'une bibliothèque nécessaire
DT_PLTRELSZ Taille en octets des entrées de repositionnement PLT
DT_PLTGOT Adresse de PLT et/ou de GOT
DT_HASH Adresse de la table de hachage des symboles
DT_STRTAB Adresse de la table des chaînes
DT_SYMTAB Adresse de la table des symboles
DT_RELA Adresse de la table de repositionnement Rela
DT_RELASZ Taille en octets de la table de repositionnement Rela
DT_RELAENT Taille en octets d'une entrée de la table de repositionnement Rela
DT_STRSZ Taille en octets de la table des chaînes
DT_SYMENT Taille en octets d'une entrée de la table des symboles
DT_INIT Adresse de la fonction d'initialisation
DT_FINI Adresse de la fonction de terminaison
DT_SONAME Déplacement dans la table des chaînes vers le nom de l'objet partagé
DT_RPATH Déplacement dans la table des chaînes pour le chemin de recherche des dépendances
directes et indirectes de la bibliothèque
DT_SYMBOLIC Demander à l'éditeur de liens de rechercher les symboles dans cet objet partagé avant
l'exécutable
DT_REL Adresse de la table de repositionnement Rel
DT_RELSZ Taille en octets de la table de repositionnement Rela
DT_RELENT Taille en octets d'une entrée de la table Rel
DT_PLTREL Type d'entrée de repositionnement auquel se réfère PLT (Rela ou Rel)
DT_DEBUG Utilisation non définie pour le débogage
DT_TEXTREL Son absence indique qu'aucune entrée de repositionnement ne devrait s'appliquer à un
segment non accessible en écriture
DT_JMPREL Adresse des entrées de repositionnement, associées uniquement à la PLT
DT_BIND_NOW Enjoindre à l'éditeur de liens dynamique de traiter tous les repositionnements avant
de transférer le contrôle à l'exécutable
DT_RUNPATH Déplacement dans la table des chaînes pour le chemin de recherche des dépendances
directes de la bibliothèque
DT_LOPROC
DT_HIPROC Les valeurs comprises dans la plage inclusive [DT_LOPROC, DT_HIPROC] sont réservées à
des sémantiques spécifiques au processeur.
d_val Ce membre représente des valeurs entières ayant des interprétations diverses.
d_ptr Ce membre représente les adresses virtuelles du programme. Lors de l'interprétation de ces
adresses, l'adresse réelle doit être calculée en se basant sur la valeur originale du fichier et
sur l'adresse de base de la mémoire. Les fichiers ne contiennent pas d'entrées de repositionnement
pour corriger ces adresses.
_DYNAMIC
Tableau contenant toutes les structures dynamiques de la section .dynamic. Cela est
automatiquement rempli par l'éditeur de liens.
Notes (Nhdr)
Les notes d'ELF permettent d'ajouter des informations arbitraires pour le système à utiliser. Elles sont
largement utilisées par les fichiers core (e_type de ET_CORE), mais de nombreux projets définissent leur
propre jeu d'extensions. Par exemple, la chaîne de compilation GNU utilise les notes d'ELF pour passer
des informations de l'éditeur de liens à la bibliothèque C.
Les sections note contiennent une série de notes (voir les définitions struct plus loin). Chaque note est
suivie par le champ nom (dont la longueur est définie dans n_namesz), puis par le champ descripteur (dont
la longueur est définie dans n_descsz) et dont l'adresse de départ a un alignement de 4 octets. Aucun
champ n'est défini dans la structure de note à cause de leur longueur arbitraire.
Un exemple pour analyser deux notes consécutives peut clarifier leur disposition en mémoire :
void *memory, *name, *desc;
Elf64_Nhdr *note, *next_note;
/* Le tampon pointe vers le début de la section ou du segment. */
note = memory;
/* Si le descripteur est défini, il suit la note. */
name = note->n_namesz == 0 ? NULL : memory + sizeof(*note);
/* Si le descripteur est défini, il suit le nom*/
(avec l'alignement). */
desc = note->n_descsz == 0 ? NULL :
memory + sizeof(*note) + ALIGN_UP(note->n_namesz, 4);
/* La note suivante suit les deux (avec l'alignement). */
next_note = memory + sizeof(*note) +
ALIGN_UP(note->n_namesz, 4) +
ALIGN_UP(note->n_descsz, 4);
Garder en mémoire que l'interprétation de n_type dépend de l'espace de noms défini par le champ n_namesz.
Si le champ n_namesz n'est pas défini (par exemple, est 0), il y a deux jeux de notes : un pour les
fichiers core et un pour tous les autres types d'ELF. Si l'espace de noms est inconnu, les outils se
replieront aussi habituellement sur ces jeux de notes.
typedef struct {
Elf32_Word n_namesz;
Elf32_Word n_descsz;
Elf32_Word n_type;
} Elf32_Nhdr;
typedef struct {
Elf64_Word n_namesz;
Elf64_Word n_descsz;
Elf64_Word n_type;
} Elf64_Nhdr;
n_namesz
La longueur du champ nom en octets. Le contenu suivra immédiatement cette note dans la mémoire. Le
nom se termine par un octet NULL. Par exemple, si le nom est « GNU », n_namesz sera défini à 4.
n_descsz
La longueur du champ descripteur en octets. Le contenu suivra immédiatement le champ du nom dans
la mémoire.
n_type Selon la valeur du champ nom, ce membre peut prendre l'une des trois valeurs suivantes :
Core files (e_type = ET_CORE)
Notes utilisées par les fichiers core. Elles sont très spécifiques au système d'exploitation
ou à l'architecture et requièrent souvent une étroite coordination avec les noyaux, les
bibliothèques C et les débogueurs. Elles sont utilisées quand l'espace de noms est celui par
défaut (c'est-à-dire n_namesz sera défini à 0), ou un repli est utilisé quand l'espace de
noms est inconnu).
NT_PRSTATUS structure prstatus
NT_FPREGSET structure fpregset
NT_PRPSINFO structure prpsinfo
NT_PRXREG structure prxregset
NT_TASKSTRUCT structure tâche
NT_PLATFORM Chaîne à partir de sysinfo(SI_PLATFORM)
NT_AUXV tableau d'auxv
NT_GWINDOWS structure gwindows
NT_ASRS structure asrset
NT_PSTATUS structure pstatus
NT_PSINFO structure psinfo
NT_PRCRED structure prcred
NT_UTSNAME structure utsname
NT_LWPSTATUS structure lwpstatus
NT_LWPSINFO structure lwpinfo
NT_PRFPXREG structure fprxregset
NT_SIGINFO siginfo_t (sa taille peut croître avec le temps)
NT_FILE Contient des informations sur les fichiers projetés
NT_PRXFPREG user_fxsr_struct
NT_PPC_VMX registres Altivec/VMX de PowerPC
NT_PPC_SPE registres SPE/EVR de PowerPC
NT_PPC_VSX registres VSX de PowerPC
NT_386_TLS emplacements TLS du i386 (structure user_desc)
NT_386_IOPERM bitmap de permission E/S du x86 (1=refus)
NT_X86_XSTATE état étendu du x86 utilisant xsave
NT_S390_HIGH_GPRS moitiés supérieures des registres du s390
NT_S390_TIMER registre du temporisateur du s390
NT_S390_TODCMP registre du comparateur d'horloge TOD (heure du jour) du s390
NT_S390_TODPREG registre programmable du TOD du s390
NT_S390_CTRS registres de contrôle du s390
NT_S390_PREFIX registre de préfixe du s390
NT_S390_LAST_BREAK adresse d'événement d'arrêt du s390
NT_S390_SYSTEM_CALL données de redémarrage d'appel système du s390
NT_S390_TDB bloc de diagnostic de transaction du S390
NT_ARM_VFP registre VFP/NEON d'ARM
NT_ARM_TLS registre TLS d'ARM
NT_ARM_HW_BREAK registres de point d'arrêt matériel d'ARM
NT_ARM_HW_WATCH registres de point d'observation matériel d'ARM
NT_ARM_SYSTEM_CALL numéro de l'appel système d'ARM
n_name = GNU
Extensions utilisées par la chaîne de compilation GNU.
NT_GNU_ABI_TAG
Information sur l'ABI du système d'exploitation (OS). Le champ desc sera composé de
quatre mots :
[0] descripteur du système d'exploitation (ELF_NOTE_OS_LINUX, ELF_NOTE_OS_GNU, etc.)
[1] version majeure de l'ABI
[2] version mineure de l'ABI
[3] version sous-mineure de l'ABI
NT_GNU_HWCAP
Information synthétique sur les capacités matérielles (hwcap). Le champ desc commence
par deux mots :
[0] nombre d'entrées
[1] masque de bits des entrées activées.
Puis suivent les entrées à longueur variable, un octet suivi d'une chaîne terminée par
un octet NULL de nom de « hwcap ». L'octet donne le numéro du bit à tester s'il est
activé, (1U << bit) & masque de bits.
NT_GNU_BUILD_ID
Identifiant unique de construction tel que généré par l'option --build-id de GNU
ld(1). Le desc consiste en n'importe quel nombre d'octets différent de zéro.
NT_GNU_GOLD_VERSION
Le desc contient la version de l'éditeur de liens Gold de GNU utilisé.
Default/unknown namespace (e_type != ET_CORE)
Elles sont utilisées quand l'espace de noms est celui par défaut (c'est-à-dire n_namesz sera
défini à 0), ou un repli est utilisé quand l'espace de noms est inconnu).
NT_VERSION Une chaîne de version d'un certain type.
NT_ARCH Information sur l'architecture.
NOTES
ELF est apparu d'abord dans le System V. Le format ELF est une norme adoptée.
Les extensions pour e_phnum, e_shnum et e_strndx sont des extensions Linux. Sun, BSD et AMD64 les gèrent
aussi. Pour plus d'informations, veuillez lire la section VOIR AUSSI.
VOIR AUSSI
as(1), elfedit(1), gdb(1), ld(1), nm(1), objcopy(1), objdump(1), patchelf(1), readelf(1), size(1),
strings(1), strip(1), execve(2), dl_iterate_phdr(3), core(5), ld.so(8)
Hewlett-Packard, Format de fichiers Elf-64 (Elf-64 Object File Format).
Santa Cruz Operation, Interface binaire des applications System V (System V Application Binary
Interface).
UNIX System Laboratories, « Object Files », Format des fichiers exécutables ELF (Executable and Linking
Format)
Sun Microsystems, Guide de l'éditeur de liens et des bibliothèques (Linker and Libraries Guide).
Version préliminaire de l'ABI AMD64 (System V Application Binary Interface. AMD64 Architecture Processor
Supplement – Interface binaire des applications System V).
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 Jean-Pierre Giraud <jean-pierregiraud@neuf.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.
Pages du manuel de Linux 6.9.1 15 juin 2024 ELF(5)