A.out
a.out是旧版类Unix系统中用于执行档、目的码和后来系统中的函式库的一种文件格式,这个名称的意思是汇编器输出。 尽管目前大多數类Unix系统都已改用ELF格式,不再采用a.out格式,但编译器和链接器依然会在用户未指定文件名时,将输出文件取名为“a.out”。[1] 应用在UNIX第一版中,就出现了给PDP-7和PDP-11用的a.out格式。[2]之后它被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取代了。 [3]Linux之所以转向ELF,或多或少是因为在此平台上构建一个a.out格式的函式库所需的复杂性过高:因为Linux中a.out的ld.so不能重定位共享函式库,所以需要一个中央机构来注册各个函式库的虚拟地址域。[4]一些BSD变体在Linux被迫转向ELF之后仍然用了很久的a.out格式,因为相比于Linux,BSD的a.out略微更灵活一些。[5]由于a.out格式的相关代码已经老旧并缺乏维护,而且已经几乎没有使用a.out格式的存在,5.1版内核决定移除相应的功能支持。[6] MINIX 3仍将a.out作为二进制文件的格式,但其不支持共享函式库。 格式a.out执行档通常是以下几种变体之一:OMAGIC、NMAGIC、QMAGIC或ZMAGIC。
a.out文件包含至多七节,顺序如下:
参见
参考资料
外部链接 |