Hand-Held Devices and Embedded
Systems Course
Student: Tomás Sánchez López
Student ID: 20042116
• What is ELF
• Basics
• Executables
• Linking View
• Execution View
• Example
• Loading and Executing and ELF executable
• Various
• Conclusions
What is ELF?
• Stands for Executable and Linking Format
•Standarized executable file format used in
most Unix sytems
• Subsitute of traditional a.out due to
efficiency issues (i.e dynamic linking)
• Developed originally in Unix Systems
Laboratory (USL) and adopted by The Tool
Interface Standard (TIS) committe.
• Three main types of ELF object files
• Relocatable files: code and data to be linked
with other object files
• Executable files
• Shared object files: Libraries
• Object file: binary representation of programs
intended to execute directly on a processor
• Static vs Dynamic Executables
• Static: Self contained. Too large files due to
static inclussion of library code
• Dynamic: Using external code or data at run
time. More convinient
• Two views of executables according to their
• Linking view: Executable participation in
program linking
• Execution view: Executable participation in
program execution
• Link View: Used at static linking time for
relocatable file combination
• Execution View: Used at run time to load and
execute programs
• Elf Header describes the file’s organization and
resides always at the beginning
• Program Header Table, if present, tells the system
how to create a process image
• Section Header Table, if present, contains
information describing the files’s sections
Relocatable files have section headers tables.
Executable files have program headers tables.
Shared object files have both.
Linking View
• Divides the object files into a collection of sections
• Sections have :
• Name and type
• Requested memory ocation at run time
• Permissions
• Each section contains a single type of information
and can contain flags (writable data, memory space
during execution or executable machine
Linking View
• Important Sections:
Path name of program interpreter (Dynamic linker)
Code (executable instructions) of a program
Initialized data
Uninitilized data
Executable instruction for process initilization
Executalbe intructions for process termination
Holds the procedure linkage table
Relocation information for section <x>
Dynamic linking information
Execution View
• Simpler view that divides the object file into
• Segments have:
• Simple type
• Requested memory location
• Permissions
• Size (in file and in memory)
• All loadable sections are packed into segments so
that file mapping is easier
Execution View
• Segment Types:
Portion of file to be loaded into memory
Pointer to dynamic linker for this executable (.interp
Pointer to dynamic linking information (.dynamic
Relocatable file 1
int x = 5;
int main() {
int r = x +funtion ();
exit (0);
Relocatable file 2
int v = 10;
int u = 32;
int z;
int function() {
return v+u;
Relocatable Object files
System Code
System code
System Data
main ()
a ()
main ()
System Code
int x = 5
System Data
int x = 5
funtion ()
int v = 10
int v = 10
int u = 32
int u = 32
Uninitialized data
int y
Loading and Executing
and ELF Executable
1. Open the file
2. Map LOAD segments into memory
3. Call the dynamic linker specified in the INTERP
segment, passing information about the
Handles all the dynamic/shared library needs of the
Retrieves information from the DYNAMIC segment
Loads all required libraries into memory
Modifies executable so it can access needed resources
in the libraries
Load and Executing and
ELF Executable
• Basically:
Relocatable File 1
Relocatable File N
Static Linking
Executable Object File
Shared Libraries
Dynamic Linker
Executing …
Shared Libraries
• Need to be compiled memory position
independent (PIC)
• Uses a Global Offset table (GOT) with
pointers to variables created at compile and
linking time
• Uses the Procedure Linkage Table (PLT) for
procedure library calling
• Implies some performance disadvantages
• Relocations tell dynamic linker to rewrite
parts of the excutable to refer to external
• Exists a dynamic debugging structure
offering information about process memory
layout and binaries loaded
• Logical evolution of old executable formats
• Convinient double view depending for linking
and executing time
• Great support for dynamic linking, crosscompilation and others
• Convinient separation between file types
depending on its function
• Standard and defined functionality for
nowadays executable file needs in diferent
• For an exhaustive review of ELF specification
please refer to:
Executable and Linkable Format (ELF)
Tool Interface Standards (TIS), Portable Formats
Specification, Version 1.1
Related documents