|
|
The ELF object file format provides two views of a file's contents:
| Linking view | Execution view | |
|---|---|---|
| ELF header | ELF header | |
| Program header table | Program header table | |
| (optional) | ||
| Section 1 | Segment 1 | |
| [. . .] | ||
| Section n | Segment 2 | |
| [. . .] | ||
| [. . .] | [. . .] | |
| Section header table | Section header table | |
| (optional) |
Object file format
Common to both views is an ELF header that resides at the beginning and holds a ``road map'' describing the file's organization.
In the linking view, sections hold the bulk of object file information which includes instructions, data, symbol table, and relocation information.
A program header table tells the system how to create a process image from the ELF object. In the program execution view, files used to build a process image (execute a program) must have a program header table; relocatable files do not need one.
A section header table contains information describing the file's sections. Every section has an entry in the table; each entry gives information such as the section name, the section size, and so forth. Files used during linking must have a section header table; other object files may or may not have one.
As described here, the object file format supports various processors with 8-bit bytes and 32-bit architectures. Nevertheless, it is intended to be extensible to larger (or smaller) architectures. Object files therefore represent some control data with a machine-independent format, making it possible to identify object files and interpret their contents in a common way. Remaining data in an object file use the encoding of the target processor, regardless of the machine on which the file was created.
32-bit data types
| Name | Size | Alignment | Purpose |
|---|---|---|---|
| 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 large integer |
| Elf32_Word | 4 | 4 | Unsigned large integer |
| unsigned char | 1 | 1 | Unsigned small integer |