Executable and Linkable Format (ELF)

From eLinux.org
Jump to: navigation, search

This page can be removed...

This page and all information/figures has been blatantly copied from Wikipedia without attribution: See original here

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,[1] and later in the Tool Interface Standard,[2] 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[3] 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 processorsTemplate:Category handlerTemplate:Category handler[citation needed].

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.


  • readelf 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.
  • elfdump is a command for viewing ELF information in an elf file, available under Solaris and FreeBSD.
  • objdump provides a wide range of information about ELF files and other object formats. objdump uses the Binary File Descriptor library as a back-end to structure the ELF data.
  • file is a Unix binary utility that displays information about the architecture of ELF files.