A.out

a.out是旧版类Unix系统中用于执行档、目的码和后来系统中的函式库的一种文件格式，这个名称的意思是汇编器输出。

尽管目前大多數类Unix系统都已改用ELF格式，不再采用a.out格式，但编译器和链接器依然会在用户未指定文件名时，将输出文件取名为“a.out”。

 应用 

在UNIX第一版中，就出现了给PDP-7和PDP-11用的a.out格式。之后它被UNIX System V中的COFF所取代，而COFF最后也被SVR4中的ELF格式所取代。

尽管BSD曾经沿用了一段时间的a.out格式，但较新的BSD系统都已切换到ELF。NetBSD/i386在1.5版中正式从a.out切换到ELF，FreeBSD/i386则是在2.2到3.0的转换中切换到ELF的。

a.out格式对调试信息的支持是由符号表中称作“stabs”的特殊项实现的。许多COFF和ELF变体中也用到了stabs格式。

Linux在1.2版内核之前也曾使用a.out格式（实验性的1.1.52版中加入了对ELF的支持），在此之后也被ELF取代了。 Linux之所以转向ELF，或多或少是因为在此平台上构建一个a.out格式的函式库所需的复杂性过高：因为Linux中a.out的ld.so不能重定位共享函式库，所以需要一个中央机构来注册各个函式库的虚拟地址域。一些BSD变体在Linux被迫转向ELF之后仍然用了很久的a.out格式，因为相比于Linux，BSD的a.out略微更灵活一些。由于a.out格式的相关代码已经老旧并缺乏维护，而且已经几乎没有使用a.out格式的存在，5.1版内核决定移除相应的功能支持。

MINIX 3仍将a.out作为二进制文件的格式，但其不支持共享函式库。

 格式 

a.out执行档通常是以下几种变体之一：OMAGIC、NMAGIC、QMAGIC或ZMAGIC。
 OMAGIC
 OMAGIC格式在文件头后有连续段，没有文本和数据的分离。也被用作目标文件格式。
 NMAGIC
 NMAGIC格式与OMAGIC相像，但数据段出现在文本段结束后的下一页，且文本段被标为只读。
 ZMAGIC
 ZMAGIC格式加入了对按需分页的支持，代码段和数据段的长度需要是页宽的整数倍。
 QMAGIC
 QMAGIC二进制文件通常被加载在虚拟地址池的底端，用以通过段错误捕获对空指针的解引用。a.out头部与文本段的第一页合并，通常会省下一页的内存。
 CMAGIC
 旧版的Linux使用此格式来存放核心转储。

a.out文件包含至多七节，顺序如下：
 执行头部
 包含内核将二进制文件加载入内存并执行所需的参数，也包含对动态链接器ld的指引。仅有本节是必须出现的。
 文本段
 包含运行时被载入内存的机器码和相关数据，可能是只读的。
 数据段
 包含已初始化的数据，总是可写的。
 文本重定位
 包含链接编辑器在合并二进制文件时修改文本段指针的记录。
 数据重定位
 与文本重定位一节类似，但是给数据段指针用的。
 符号表
 包含链接编辑器用于交叉引用不同二进制文件中变量和函式（符号）的记录。
 字符串表
 包含对应于符号表的字符串。

 参见 
 Portable Executable
 ELF
 Vasm，一个自由的汇编器

 参考资料 

 外部链接 
 a.out格式
 a.out格式的Unix手册页

Category:可执行文件格式