a.out是旧版类Unix系统中用于执行档、目的码和后来系统中的函数库的一种文件格式,这个名称的意思是汇编器输出。
尽管目前大多数类Unix系统都已改用ELF格式,不再采用格式,但编译器和链接器依然会在用户未指定文件名时,将输出文件取名为“a.out”。
在UNIX第一版中,就出现了给PDP-7和PDP-11用的格式。之后它被UNIX System V中的COFF所取代,而COFF最后也被SVR4中的ELF格式所取代。
尽管BSD曾经沿用了一段时间的格式,但较新的BSD系统都已切换到ELF。NetBSD/i386在1.5版中正式从切换到ELF,FreeBSD/i386则是在2.2到3.0的转换中切换到ELF的。
格式对调试信息的支持是由符号表中称作“stabs”的特殊项实现的。许多COFF和ELF变体中也用到了stabs格式。
Linux在1.2版内核之前也曾使用格式(实验性的1.1.52版中加入了对ELF的支持),在此之后也被ELF取代了。 Linux之所以转向ELF,或多或少是因为在此平台上构建一个格式的函数库所需的复杂性过高:因为Linux中的ld.so不能重定位共享函数库,所以需要一个中央机构来注册各个函数库的虚拟地址域。一些BSD变体在Linux被迫转向ELF之后仍然用了很久的格式,因为相比于Linux,BSD的略微更灵活一些。由于a.out格式的相关代码已经老旧并缺乏维护,而且已经几乎没有使用a.out格式的存在,5.1版内核决定移除相应的功能支持。
MINIX 3仍将作为二进制文件的格式,但其不支持共享函数库。
执行档通常是以下几种变体之一:OMAGIC、NMAGIC、QMAGIC或ZMAGIC。
文件包含至多七节,顺序如下: