Unlike many proprietary executable file formats, ELF is very
flexible and extensible, and it is not bound to any particular
processor or architecture. This has allowed it to be
adopted by many different operating systems on many different
platforms.

Contents

ELF file
layout

An ELF file has two views: The program header shows the
segments used at run-time, whereas the section header
lists the set of sections of the binary.

Each ELF file is made up of one ELF header, followed by file
data. The file data can include:

Program header table, describing zero or more segments

Section header table, describing zero or more sections

Data referred to by entries in the program header table, or the
section header table

The segments contain information that is necessary for runtime
execution of the file, while sections contain important data for
linking and relocation. Each byte in the entire file is taken by no
more than one section at a time, but there can be orphan bytes,
which are not covered by a section. In the normal case of a Unix
executable one or more sections are enclosed in one segment.

Tools

readelf is a Unix binary utility that displays
information about one or more ELF files. A GPL implementation is
provided by GNU
Binutils.

elfdump is a command for viewing ELF information
in an elf file, available under Solaris and FreeBSD.

With the BSDs having long supported Linux binaries (through a compatibility layer) and the main
x86 Unix vendors having added
support for the format, the project decided that Linux ELF was the
format chosen by the industry and "declare[d] itself dissolved" on
July 25, 1999.[6]