Comparison of executable file formats

From Wikipedia, the free encyclopedia
Jump to: navigation, search

This is a comparison of binary executable file formats which, once loaded by a suitable executable loader, can be directly executed by the CPU rather than become interpreted by software. In addition to the binary application code, the executables may contain headers and tables with relocation and fixup information as well as various kinds of meta data. Among those formats listed, the ones in most common use are PE (on Microsoft Windows), ELF (on Linux and most other versions of Unix), Mach-O (on OS X and iOS) and MZ (on DOS).

Format name Operating system Filename extension Explicit processor declarations Arbitrary sections Metadata[1] Digital signature String table Symbol table 64-bit Fat binaries Can contain icon
OS/360 OS/360 and VS/9 mainframe systems
none
No No No No No Yes Yes No No
a.out Unix-like
none
No No No No Yes[1] Yes[1] Extension No No
COFF Unix-like
none
Yes by file Yes No No Yes Yes Extension No No
ECOFF Ultrix, Tru64 UNIX, IRIX
none
Yes by file Yes No No Yes Yes Yes No No
XCOFF IBM AIX, BeOS, Mac OS
none
Yes by file Yes No No Yes Yes[2] Yes No No
ELF Unix-like
none
Yes by file Yes Yes Yes[3] Yes Yes[4] Yes Extension[5] Extension[6]
Mach-O[7] NeXTSTEP, OS X, iOS
none
Yes by section Some (limited to max. 256 sections) Yes Yes Yes Yes Yes Yes No
SOM HP-UX, MPE/ix ? Unknown Unknown No No Unknown Yes No Unknown No
Amiga Hunk AmigaOS ? Unknown Yes Yes No No Yes No Yes No
PEF[8] Mac OS
none
Yes by file No No No Yes Yes No No No
CMD CP/M-86, MP/M-86, Concurrent CP/M-86, Personal CP/M-86, S5-DOS, Concurrent DOS, Concurrent DOS 286, FlexOS, S5-DOS/ST, S5-DOS/MT, Concurrent DOS 386, Multiuser DOS, System Manager, REAL/32, DOS Plus
.CMD
No (x86 only) Yes No No Extension Extension No No No
FlexOS 186 FlexOS 186, FlexOS 286, S5-DOS/ST, S5-DOS/MT, 4680 OS, FlexOS 386, 4690 OS
.186
No (186/188 and higher only) Yes No No Extension Extension No No No
FlexOS 286 FlexOS 286, S5-DOS/ST, S5-DOS/MT, 4680 OS, FlexOS 386, 4690 OS
.286
No (286 and higher only) Yes No No Extension Extension No No No
CP/M-68K CP/M-68K, Concurrent DOS 68K, FlexOS 68K
.68K
No (68000 and higher only) Yes No No Unknown Unknown No No No
COM (CP/M) CP/M, MP/M, Concurrent CP/M, Personal CP/M
.COM
No (8080/Z80 only) Extension (BDOS 3 and higher only) No No No No No Extension No
COM (DOS) DOS, OS/2, Windows (except for 64-bit editions), Concurrent CP/M-86 (BDOS 3.1 only), Concurrent DOS, Concurrent DOS 286, FlexOS, Concurrent DOS 386, Multiuser DOS, System Manager, REAL/32, DOS Plus
.COM
No (x86 only) No Extension (Novell/Caldera VERSION etc.) No No No Extension Extension No
MZ (DOS) DOS, OS/2, Windows (except for 64-bit editions), Concurrent DOS 286, FlexOS, Concurrent DOS 386, Multiuser DOS, System Manager, REAL/32, DOS Plus
.EXE
No (x86 only) Yes Extension(Novell/Caldera VERSION etc.) No Extension Extension Extension No No
MZ (GEM) GEM, ViewMAX
.APP/.ACC
No (x86 only) Yes No No Unknown Unknown No No Unknown
NE European MS-DOS, OS/2, Windows, HX DOS Extender
.EXE
Unknown Unknown Unknown No Unknown Unknown No No Yes
LE, (W3, W4) OS/2 (2.0 and higher only), some DOS extenders
.EXE
Yes by file (286 and higher only) Yes Yes No Yes Yes No No Yes
LX OS/2 (2.0 and higher only), some 32-bit DOS extenders
.EXE
Yes by file Yes Yes No Yes Yes[9] No No Yes
PE Windows, ReactOS, HX DOS Extender, BeOS (R3 and higher only)
.EXE
Yes by file Yes Yes Yes[10] Yes Yes No No Yes
PE32+ Windows (64-bit editions only)
.EXE
Yes by file Yes Yes Yes Yes Yes Yes No Yes
PIM/XIP PalmDOS (MINIMAX applications only)
.PIM/.XIP
No (x86 only) Yes No No No No No No No
DL MS-DOS System Manager applications (HP LX series only)
.EXM
No (186/188 and higher only) Yes No No No No No No No
MP Phar Lap DOS extenders
.EXP
Unknown (286 and higher only) Yes No No Unknown Unknown No No No
P2 Phar Lap 16-bit DOS extenders
.EXP
Unknown (286 and higher only) Yes No No Unknown Unknown No No No
P3 Phar Lap 32-bit DOS extenders
.EXP
Unknown (386 and higher only) Yes No No Unknown Unknown No No No
GEOS PC/GEOS, Geoworks Ensemble, NewDeal Office, Breadbox Ensemble
.GEO
Unknown (x86 only) Unknown Unknown No Unknown Unknown No No Unknown

Notes[edit]

^ Metadata
Metadata is casually used to describe the controlling data used in software architectures that are more abstract or configurable. Most executable file formats include what may be termed "metadata" that specifies certain, usually configurable, behavioral runtime characteristics. However, it is difficult if not impossible to precisely distinguish program "metadata" from general aspects of stored-program computing architecture; if the machine reads it and acts upon it, it is a computational instruction, and the prefix "meta" has little significance.
In Java, the class file format contains metadata used by the Java compiler and the Java virtual machine to dynamically link classes and to support reflection. The Java Platform, Standard Edition since J2SE 5.0 has included a metadata facility to allow additional annotations that are used by development tools.
In MS-DOS, the COM file format does not normally include metadata, while the EXE file and Windows PE formats do. These metadata can include the company that published the program, the date the program was created, the version number and more.
In the .NET Framework executable format, extra metadata is included to allow reflection at runtime.

References[edit]

  1. ^ a b "a.out(5) - FreeBSD Man Pages". Freebsd.org. 2010-06-10. Retrieved 2012-07-09. 
  2. ^ "Files Reference – XCOFF Object File Format". IBM. 
  3. ^ "elfsign – Freecode". Freshmeat.net. Retrieved 2012-07-09. 
  4. ^ "(3elf) - Elf library routines". Uw714doc.sco.com. 2004-04-25. Retrieved 2012-07-09. 
  5. ^ "FatELF: Universal Binaries for Linux". Icculus.org. Retrieved 2012-07-09. 
  6. ^ "ElfIcon: Icons for ELF files". Compholio.com. Retrieved 2012-07-09. 
  7. ^ "Mac OS X ABI Mach-O File Format Reference". Apple Inc. 2009-02-04. Retrieved 2012-07-09. 
  8. ^ "MPW Command Reference - DumpPEF". Apple Inc. Archived from the original on May 12, 2008. 
  9. ^ "Linear eXecutable Module Format". Retrieved 2012-07-09. 
  10. ^ "Windows Authenticode Portable Executable Signature Format". Microsoft. 2008-08-29. Retrieved 2012-07-09.