Data Representation
The object file format supports various processors with 8-bit bytes, 32–bit
architectures and 64–bit architectures. Nevertheless, the data representation is intended to
be extensible to larger, or smaller, architectures. Table 12–1 and Table 12–2
list the 32–bit data types and 64–bit data types.
Object files represent some control data with a machine-independent format. This format
provides for the common identification and interpretation of object files. The remaining data in an
object file use the encoding of the target processor, regardless of the machine on which the file
was created.
Table 12-1 ELF 32–Bit Data Types
|
|
|
|
Elf32_Addr
|
4
|
4
|
Unsigned program address
|
Elf32_Half
|
2
|
2
|
Unsigned medium integer
|
Elf32_Off
|
4
|
4
|
Unsigned file offset
|
Elf32_Sword
|
4
|
4
|
Signed integer
|
Elf32_Word
|
4
|
4
|
Unsigned integer
|
unsigned char
|
1
|
1
|
Unsigned small integer
|
|
Table 12-2 ELF 64–Bit Data Types
|
|
|
|
Elf64_Addr
|
8
|
8
|
Unsigned program address
|
Elf64_Half
|
2
|
2
|
Unsigned medium integer
|
Elf64_Off
|
8
|
8
|
Unsigned file offset
|
Elf64_Sword
|
4
|
4
|
Signed integer
|
Elf64_Word
|
4
|
4
|
Unsigned integer
|
Elf64_Xword
|
8
|
8
|
Unsigned long integer
|
Elf64_Sxword
|
8
|
8
|
Signed long integer
|
unsigned char
|
1
|
1
|
Unsigned small integer
|
|
All data structures that the object file format defines follow the natural size and alignment
guidelines for the relevant class. Data structures can contain explicit padding to ensure 4-byte
alignment for 4-byte objects, to force structure sizes to a multiple of 4, and so forth. Data also
have suitable alignment from the beginning of the file. Thus, for example, a structure containing an
Elf32_Addr member is aligned on a 4-byte boundary within the file. Similarly, a
structure containing an Elf64_Addr member is aligned on an 8–byte
boundary.
Note -
For portability, ELF uses no bit-fields.