Executable and Linkable Format (ELF)

In computing, the Executable and Linkable Format (ELF, formerly called Extensible Linking Format) is a common standard file format for executables, object code, shared libraries, and core dumps. First published in the System V application binary interface|Application Binary Interface specification, and later in the Tool Interface Standard, it was quickly accepted among different vendors of Unix systems. In 1999 it was chosen as the standard binary file format for Unix and Unix-like systems on x86 by the 86open project.

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

The ELF format has replaced older executable formats such as a.out and COFF in many Unix-like operating systems such as Linux, Solaris (operating system), IRIX, FreeBSD, NetBSD, OpenBSD, DragonFly BSD, Syllable Desktop (operating system), and HP-UX (except for 32-bit PA-RISC programs which continue to use System Object Model (file format)). ELF has also seen some adoption in non-Unix operating systems, such as the Itanium version of OpenVMS, BeOS Revision 4 and later for x86 architecture (where it replaced the Portable Executable format; the PowerPC version stayed with Preferred Executable Format), and Haiku (operating system). The PlayStation Portable, PlayStation 2, PlayStation 3, Wii, Nintendo DS and GP2X consoles also use ELF. AmigaOS 4 and MorphOS also running on PowerPC machines, use ELF. On the Amiga platform the ELF executable has replaced the previous EHF (Extended Hunk Format) which was used on Amigas equipped with PPC processor expansion cards. The Symbian OS v9 uses E32Image format that is based on ELF file format.

Most Sony Ericsson (for example, the Sony Ericsson W800, Sony Ericsson W610i, Sony Ericsson W300, etc.), some Siemens (SGOLD and SGOLD2 platforms: from Siemens C65 to S75 and BenQ-Siemens E71/BenQ-Siemens EL71) and Motorola (for example, the E398, Motorola SLVR L7, v360, Motorola_RAZR_V3#V3i and all phone LTE2 which has the patch applied) phones can run ELF files through the use of a Patch (computing) that adds Assembly Language to the main firmware (known as the ELFPack, in the underground modding culture).

The ELF file format is also used as a generic object and executable format for binary images used with embedded processors.

ELF file layout


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

 * is a Unix binary utility that displays information about one or more ELF files. A GNU General Public License implementation is provided by GNU Binutils.
 * is a command for viewing ELF information in an elf file, available under Solaris and FreeBSD.
 * provides a wide range of information about ELF files and other object formats.  uses the Binary File Descriptor library as a back-end to structure the ELF data.
 * is a Unix binary utility that displays information about the architecture of ELF files.

Specifications

 * Generic:
 * System V Application Binary Interface Edition 4.1 (1997-03-18)
 * System V ABI Update (October 2009)
 * ELF-64 Object File Format Version 1.5 Draft 2 (May 1998)
 * AMD64:
 * System V ABI, AMD64 Supplement
 * ARM architecture:
 * ELF for the ARM Architecture
 * IA32:
 * System V ABI, IA32 Supplement
 * IA64:
 * Itanium Software Conventions and Runtime Guide (September 2000)
 * M32R:
 * M32R ELF ABI Supplement Version 1.2 (2004-08-26)
 * MIPS architecture:
 * System V ABI, MIPS RISC Processor Supplement
 * MIPS EABI documentation (2003-06-11)
 * Motorola 6800:
 * Motorola 8 and 16 bit Embedded ABI
 * PA-RISC:
 * PowerPC:
 * ''System V ABI, PPC Supplement
 * PowerPC Embedded Application Binary Interface 32-Bit Implementation (1995-10-01)
 * 64-bit PowerPC ELF Application Binary Interface Supplement Version 1.9 (2004)
 * SPARC:
 * System V ABI, SPARC Supplement
 * S/390:
 * ''S/390 ELF ABI Supplement
 * zSeries:
 * zSeries ELF ABI Supplement
 * Symbian OS 9:
 * E32Image file format on Symbian OS 9