用过linux的都知道,在linux下编译链接程序,如果不加-o参数,生成的binary代码的名字都是默认的a.out。一不小心,a.out还会覆盖上次其他code生成的binary代码。
a.out是"assembler output"的缩写格式,代表汇编程序输出。在较早版本的类unix系统中,a.out是一种输出格式,用于可执行文件,目标文件和共享库。早期的 PDP-7系统上没有链接器,程序的创建过程是先把所有源文件连接成一个文件,然后进行汇编,产生的汇编程序保存在a.out中。这样a.out是名副其实的汇编输出,但到PDP-11之后,人们为其编写了链接器,程序的创建是先编译然后链接输出保存到a.out中,这时a.out其实已经是链接输出了,但输出的可执行文件仍然延续这个命名习惯。
Unix中的可执行文件用一种特殊的方式加上标签,这样便于系统确认它们的属性。普遍采用的方式是使用独特的数字,这些数字也被称为“神秘”数字。一个例子是,Unix文件系统中的superblock就是用下面的数字做标签:
#define FS_MAGIC 0x011954
而这个神秘数字是Berkeley fast文件系统的作者Kirk McKusick的生日。a.out文件中的神秘数字是0407。0407是PDP-11的一条无条件转移指令的二进制编码,这个数字会让执行器跳过 a.out头文件,进入程序的第一个真正的可执行指令。PDP-11是当时最正统的Unix机器,在a.out要规定神秘数字时,0407就被选择。
后来,因为构建a.out的复杂性,a.out格式被现在普遍使用的ELF格式所替代,但输出文件名仍旧是a.out。现在我们看到的a.out只是一个可执行文件,而不再是文件格式。ELF可执行文件的第一个字节是八进制177也就是16进制的7F,紧跟其后的2,3,4字节是ELF三个字母。你可以输入od -c a.out | head查看一下。
分享到:
相关推荐
本文将探讨三种主要的可执行文件格式——`a.out`、`COFF`(Common Object File Format)和`ELF`(Executable and Linking Format),并分析编译、链接和加载的过程。 #### `a.out` 文件格式 `a.out` 是UNIX早期最...
a.out文件由几个主要部分组成,包括代码、数据、符号表和重定位信息。尽管a.out在历史上的地位显著,但它由于缺乏某些高级功能(如动态链接)而逐渐被更先进的格式取代。 其次,COFF是通用对象文件格式,它被多个...
本篇文章主要探讨了三种主要的可执行文件格式:a.out、COFF(Common Object File Format)以及ELF(Executable and Linking Format),重点在于ELF文件格式及其加载过程。 ELF文件格式是目前Linux系统最广泛使用的...
2. **构建数据库**:在项目根目录下运行`cscope -b -q`,这将生成一个.cscope.out文件,包含了项目的所有符号信息。 3. **与GVim集成**:在GVim中,可以使用`:cs add .`命令添加当前目录的cscope数据库,然后通过`:...
`a.out` 文件格式是一种早期的可执行文件格式,在许多 Unix 及类 Unix 系统中广泛使用。它定义了如何将程序编译成二进制格式,并规定了加载器如何将这些二进制文件加载到内存中运行。 #### `a.out.h` 头文件解析 ...
6.SCO Unix 制作系统应急盘“Out of inodes”错误的处理 7.SCO TCP/IP网络管理---TCP/IP的启动 8.SCO TCP/IP网络管理---工具介绍 9.SCO TCP/IP网络管理---信任关系 10.SCO TCP/IP网络管理---FTP的配置 11.SCO TCP/IP...
要理解Android.mk文件及其与整个Android编译系统的联系,需要一定的深入分析,但好处是,通过编写一个新的Android.mk文件来增加一个新的组件(Component)相对简单。而对于Java程序的编译,可以通过Eclipse集成环境...
= 2) err_quit("usage: a.out <IP address>"); if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) ) err_sys("socket error"); bzero(&servaddr, sizeof(servaddr)); // 后续代码包括设置服务器地址、连接服务器...
**3.6 显示文件内容 (Chapter 12: Showing What's in a File)** - **cat, less, more命令**: 显示文件内容的不同方式。 - **grep命令**: 在文件中搜索特定模式。 - **正则表达式**: 使用正则表达式匹配文本。 **3.7...
本文将深入解析ELF文件结构,并通过分析`demo.c`源代码和`a.out`编译结果来理解其工作原理。 首先,`demo.c`是一个C语言源代码文件,它包含了程序的逻辑和指令。在编程环境中,我们通常会用编译器(如GCC)将其转化...
3. 启动调试会话,加载程序到dbx环境中,可以使用“dbx a.out”命令启动调试,并加载名为a.out的可执行程序。 4. 运行程序,使用dbx提供的命令来控制程序的执行,包括运行、继续、单步执行等。 5. 检查core文件,...
2. 认证与授权:实现不同的认证机制,如 UNIX、GSSAPI 或 Kerberos,确保只有授权的客户端可以访问文件。 3. 缓存管理:为了提高性能,NFS 服务器通常会缓存文件元数据和部分数据,"nfsd.c" 可能包含这部分逻辑。 4....
Makefile是Unix/Linux环境下自动化构建工具的核心,它用于编译和链接C/C++等编程语言的项目。在软件开发过程中,Makefile可以帮助开发者自动化构建、编译、链接、测试等一系列繁琐的操作,极大地提高了效率。本案例...
标题 "time.tar.gz" 暗示这是一个使用 gzip 压缩工具压缩的 tar 归档文件,通常用于在Linux或Unix-like系统中打包多个文件或目录。".tar" 扩展名代表“tar archive”,它能将多个文件和目录组合成一个单一的文件以...
首先,我们要解压“dictionary.tar.gz”文件,这将得到三个文件:dictionary.c(源代码文件)、dic(可能为词典数据文件)和a.out(编译后的可执行文件)。在Linux或类Unix系统中,我们可以使用`tar -zxvf ...
在IT领域,检查文件是否存在是日常操作的一部分,无论是开发、运维还是数据分析,都需要频繁地确认文件或目录是否在指定的位置。下面将详细讲解如何在不同的操作系统和编程环境中进行这项操作。 1. **Windows操作...
它被广泛应用于Linux和其他类UNIX操作系统中,取代了早期的a.out和COFF格式。ELF文件系统格式的设计目的是提供一种高效、灵活且扩展性强的二进制文件结构。 **1. 文件结构** ELF文件由多个固定大小的节(Section)...