Section header
An object file's section header table lets one locate all
the file's sections. The section header table is an array
of Elf32_Shdr structures as described in
``Special section indexes''.
A section header table index is a subscript into this
array. The ELF header's e_shoff
member
gives the byte offset from the beginning of the file to the
section header table. e_shnum
tells how many
entries the section header table contains.
e_shentsize
gives the size in bytes of each
entry.
Some section header table indexes are reserved;
an object file will not have sections for these special indexes.
Special section indexes
Name
|
Value
|
|
SHN_UNDEF
|
0
|
|
SHN_LORESERVE
|
0xff00
|
|
SHN_LOPROC
|
0xff00
|
|
SHN_HIPROC
|
0xff1f
|
|
SHN_ABS
|
0xfff1
|
|
SHN_COMMON
|
0xfff2
|
|
SHN_HIRESERVE
|
0xffff
|
|
SHN_UNDEF-
This value marks an undefined, missing, irrelevant, or
otherwise meaningless section reference. For example, a
symbol ``defined'' relative to section number
SHN_UNDEF is an undefined symbol.
NOTE:
Although index 0 is reserved as the undefined value, the
section header table contains an entry for index 0. If the
e_shnum
member of the ELF header says a
file has 6 entries in the section header table, they have
the indexes 0 through 5.
SHN_LORESERVE-
This value specifies the lower bound of the
range of reserved indexes.
SHN_LOPROC through SHN_HIPROC-
Values in this inclusive range are reserved for
processor-specific semantics.
SHN_ABS-
This value specifies absolute values for the corresponding
reference. For example, symbols defined relative to
section number SHN_ABS have absolute values and
are not affected by relocation.
SHN_COMMON-
Symbols defined relative to this section are common
symbols, such as FORTRAN, COMMON or
unallocated C external variables.
SHN_HIRESERVE-
This value specifies the upper bound of the range of
reserved indexes. The system reserves indexes between
SHN_LORESERVE and SHN_HIRESERVE,
inclusive; the values do not reference the section header
table. The section header table does not contain entries
for the reserved indexes.
Sections contain all information in an object file except
the ELF header, the program header table, and the
section header table. Moreover, object files' sections
satisfy several conditions.
-
Every section in an object file has exactly one section
header describing it. Section headers may exist that do
not have a section.
-
Each section occupies one contiguous (possibly empty)
sequence of bytes within a file.
-
Sections in a file may not overlap. No byte in a file
resides in more than one section.
-
An object file may have inactive space. The various
headers and the sections might not ``cover'' every byte in
an object file. The contents of the inactive data are
unspecified.
A section header has the following structure.
typedef struct {
Elf32_Word sh_name;
Elf32_Word sh_type;
Elf32_Word sh_flags;
Elf32_Addr sh_addr;
Elf32_Off sh_offset;
Elf32_Word sh_size;
Elf32_Word sh_link;
Elf32_Word sh_info;
Elf32_Word sh_addralign;
Elf32_Word sh_entsize;
} Elf32_Shdr;
Section header
sh_name
-
This member specifies the name of the section. Its value
is an index into the section header string table section,
giving the location of a null-terminated string.
NOTE:
See
``String table''
for more information.
sh_type
-
This member categorizes the section's contents and
semantics. Section types and their descriptions appear in
``Section types, sh_type''.
sh_flags
-
Sections support 1-bit flags that describe miscellaneous
attributes. Flag definitions appear in
``Section types, sh_type''.
sh_addr
-
If the section will appear in the memory image of a
process, this member gives the address at which the
section's first byte should reside. Otherwise, the member
contains 0.
sh_offset
-
This member's value gives the byte offset from the
beginning of the file to the first byte in the section.
One section type, SHT_NOBITS, described in
``Section types, sh_type'',
occupies no space in the file, and its
sh_offset
member locates the conceptual placement in the file.
sh_size
-
This member gives the section's size in bytes. Unless the
section type is SHT_NOBITS, the section occupies
sh_size
bytes in the file. A section of type
SHT_NOBITS may have a non-zero size, but it
occupies no space in the file.
sh_link
-
This member holds a section header table index link,
whose interpretation depends on the section type.
``Section types, sh_type''
describes the values.
sh_info
-
This member holds extra information, whose interpretation
depends on the section type.
``Section types, sh_type''
describes the values.
sh_addralign
-
Some sections have address alignment constraints.
For example, if a section holds a doubleword, the system
must ensure doubleword alignment for the entire section.
The value of
sh_addr
must be congruent to 0,
modulo the value of sh_addralign
. Currently,
only 0 and positive integral powers of two are allowed.
Values 0 and 1 mean the section has no alignment
constraints.
sh_entsize
-
Some sections hold a table of fixed-size entries, such as a
symbol table. For such a section, this member gives the
size in bytes of each entry. The member contains 0 if the
section does not hold a table of fixed-size entries.
A section header's sh_type
member specifies the
section's semantics.
Section types, sh_type
Name
|
Value
|
SHT_NULL
|
0
|
SHT_PROGBITS
|
1
|
SHT_SYMTAB
|
2
|
SHT_STRTAB
|
3
|
SHT_RELA
|
4
|
SHT_HASH
|
5
|
SHT_DYNAMIC
|
6
|
SHT_NOTE
|
7
|
SHT_NOBITS
|
8
|
SHT_REL
|
9
|
SHT_SHLIB
|
10
|
SHT_DYNSYM
|
11
|
SHT_LOPROC
|
0x70000000
|
SHT_HIPROC
|
0x7fffffff
|
SHT_LOUSER
|
0x80000000
|
SHT_HIUSER
|
0xffffffff
|
SHT_NULL-
This value marks the section header as inactive;
it does not have an associated section.
Other members of the section header have undefined values.
SHT_PROGBITS-
The section holds information defined by the program,
whose format and meaning are determined solely by the program.
SHT_SYMTAB and SHT_DYNSYM-
These sections hold a symbol table. Currently, an object
file may have only one section of each type, but this
restriction may be relaxed in the future. Typically,
SHT_SYMTAB provides symbols for link editing,
though it may also be used for dynamic linking. As a
complete symbol table, it may contain many symbols
unnecessary for dynamic linking. Consequently, an object
file may also contain a SHT_DYNSYM section, which
holds a minimal set of dynamic linking symbols, to save
space.
NOTE:
See
``Symbol table''
for details.
SHT_STRTAB-
The section holds a string table.
An object file may have multiple string table sections.
NOTE:
See
``String table''
for details.
SHT_RELA-
The section holds relocation entries with explicit addends,
such as type Elf32_Rela for the 32-bit class of
object files. An object file may have multiple relocation
sections.
NOTE:
See
``Relocation''
for details.
SHT_HASH-
The section holds a symbol hash table. Currently, an
object file may have only one hash table, but this
restriction may be relaxed in the future.
See
``Hash table''
in the second part of this chapter for details.
SHT_DYNAMIC-
The section holds information for dynamic linking.
Currently, an object file may have only one dynamic
section, but this restriction may be relaxed in the
future.
See
``Dynamic section''
in the second part of this
chapter for details.
SHT_NOTE-
The section holds information that marks the file in some way.
See
``Note section''
in the second part of this chapter for details.
SHT_NOBITS-
A section of this type occupies no space in the file but
otherwise resembles SHT_PROGBITS. Although this
section contains no bytes, the
sh_offset
member
contains the conceptual file offset.
SHT_REL-
The section holds relocation entries
without explicit addends, such as type
Elf32_Rel for the 32-bit class of object files.
An object file may have multiple relocation sections.
NOTE:
See
``Relocation''
for details.
SHT_SHLIB-
This section type is reserved but has unspecified semantics.
SHT_LOPROC through SHT_HIPROC-
Values in this inclusive range
are reserved for processor-specific semantics.
SHT_LOUSER-
This value specifies the lower bound of the range of
indexes reserved for application programs.
SHT_HIUSER-
This value specifies the upper bound of the range of
indexes reserved for application programs. Section types
between SHT_LOUSER and SHT_HIUSER
may be used by the application, without conflicting with
current or future system-defined section types.
Other section type values are reserved. As mentioned
before, the section header for index 0 (SHN_UNDEF)
exists, even though the index marks undefined section
references. This entry holds the following.
Section header table entry: index 0
Name
|
Value
|
Note
|
sh_name
|
0
|
No name
|
sh_type
|
SHT_NULL
|
Inactive
|
sh_flags
|
0
|
No flags
|
sh_addr
|
0
|
No address
|
sh_offset
|
0
|
No file offset
|
sh_size
|
0
|
No size
|
sh_link
|
SHN_UNDEF
|
No link information
|
sh_info
|
0
|
No auxiliary information
|
sh_addralign
|
0
|
No alignment
|
sh_entsize
|
0
|
No entries
|
A section header's sh_flags
member holds 1-bit flags that describe the section's attributes.
Defined values appear in
``Section attribute flags, sh_flags'';
other values are reserved.
Section attribute flags, sh_flags
Name
|
Value
|
|
SHF_WRITE
|
0x1
|
|
SHF_ALLOC
|
0x2
|
|
SHF_EXECINSTR
|
0x4
|
|
SHF_MASKPROC
|
0xf0000000
|
|
If a flag bit is set in sh_flags
,
the attribute is on for the section.
Otherwise, the attribute is off or does not apply.
Undefined attributes are set to zero.
SHF_WRITE-
The section contains data that should be writable during
process execution.
SHF_ALLOC-
The section occupies memory during process execution.
Some control sections do not reside in the memory image
of an object file; this attribute is off for those sections.
SHF_EXECINSTR-
The section contains executable machine instructions.
SHF_MASKPROC-
All bits included in this mask
are reserved for processor-specific semantics.
Two members in the section header,
sh_link
and sh_info
,
hold special information, depending on section type.
sh_link and sh_info interpretation
sh_type
|
sh_link
|
sh_info
|
SHT_DYNAMIC
|
The section header index of the string table
used by entries in the section.
|
0
|
SHT_HASH
|
The section header index of the symbol table
to which the hash table applies.
|
0
|
SHT_REL
SHT_RELA
|
The section header index of the associated
symbol table.
|
The section header index of the section to
which the relocation applies.
|
SHT_SYMTAB
SHT_DYNSYM
|
The section header index of the associated
string table.
|
One greater than the symbol table index
of the last local symbol (binding STB_LOCAL).
|
other
|
SHN_UNDEF
|
0
|
Next topic:
Special sections
Previous topic:
ELF header flags
© 2003 Caldera International, Inc. All rights reserved.
SCO OpenServer Release 5.0.7 -- 11 February 2003