1ELF(5)                     Linux Programmer's Manual                    ELF(5)
2
3
4

NAME

6       elf - format of Executable and Linking Format (ELF) files
7

SYNOPSIS

9       #include <elf.h>
10

DESCRIPTION

12       The  header  file  <elf.h>  defines the format of ELF executable binary
13       files.  Amongst these files are normal  executable  files,  relocatable
14       object files, core files, and shared objects.
15
16       An executable file using the ELF file format consists of an ELF header,
17       followed by a program header table or a section header table, or  both.
18       The  ELF  header  is  always  at  offset zero of the file.  The program
19       header table and the section header table's  offset  in  the  file  are
20       defined  in  the  ELF  header.  The two tables describe the rest of the
21       particularities of the file.
22
23       This header file describes the above mentioned headers as C  structures
24       and  also includes structures for dynamic sections, relocation sections
25       and symbol tables.
26
27   Basic types
28       The following types are used for  N-bit  architectures  (N=32,64,  ElfN
29       stands for Elf32 or Elf64, uintN_t stands for uint32_t or uint64_t):
30
31           ElfN_Addr       Unsigned program address, uintN_t
32           ElfN_Off        Unsigned file offset, uintN_t
33           ElfN_Section    Unsigned section index, uint16_t
34           ElfN_Versym     Unsigned version symbol information, uint16_t
35           Elf_Byte        unsigned char
36           ElfN_Half       uint16_t
37           ElfN_Sword      int32_t
38           ElfN_Word       uint32_t
39           ElfN_Sxword     int64_t
40           ElfN_Xword      uint64_t
41
42       (Note:  the  *BSD terminology is a bit different.  There, Elf64_Half is
43       twice as large as Elf32_Half, and Elf64Quarter is  used  for  uint16_t.
44       In  order  to avoid confusion these types are replaced by explicit ones
45       in the below.)
46
47       All data structures that the file format defines follow  the  "natural"
48       size  and  alignment  guidelines for the relevant class.  If necessary,
49       data structures contain explicit padding to ensure 4-byte alignment for
50       4-byte objects, to force structure sizes to a multiple of 4, and so on.
51
52   ELF header (Ehdr)
53       The ELF header is described by the type Elf32_Ehdr or Elf64_Ehdr:
54
55           #define EI_NIDENT 16
56
57           typedef struct {
58               unsigned char e_ident[EI_NIDENT];
59               uint16_t      e_type;
60               uint16_t      e_machine;
61               uint32_t      e_version;
62               ElfN_Addr     e_entry;
63               ElfN_Off      e_phoff;
64               ElfN_Off      e_shoff;
65               uint32_t      e_flags;
66               uint16_t      e_ehsize;
67               uint16_t      e_phentsize;
68               uint16_t      e_phnum;
69               uint16_t      e_shentsize;
70               uint16_t      e_shnum;
71               uint16_t      e_shstrndx;
72           } ElfN_Ehdr;
73
74       The fields have the following meanings:
75
76       e_ident   This  array  of  bytes  specifies  how to interpret the file,
77                 independent of the processor or  the  file's  remaining