用过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查看一下。

最新文章

  1. mac os设置root密码
  2. SQL语句大全(转载)
  3. 20161117__Z
  4. Antenna Placement poj 3020(匹配)
  5. MyBatis知多少(1)
  6. SELECTION-SCREEN 加按钮
  7. C#文本文件导入数据库
  8. IIS7构造Gzip压缩
  9. 分享一个c#写的开源分布式消息队列equeue
  10. C#调用bat 不显示DOS窗口,禁止DOS窗口一闪而过
  11. FAT32文件系统的存储组织结构(二)
  12. 从IE浏览器获取当前页面的内容
  13. Golang中mac地址+时间戳加入rand.Seed()产生随机数
  14. Shiro 自定义角色 认证
  15. Excel操作小结
  16. TableLayoutPanel 行高列宽设置
  17. ns3的输入输出奥秘(三) Tracing系统
  18. golang标准库分析之net/rpc
  19. [算法整理]树上求LCA算法合集
  20. Elasticsearch java API (23)查询 DSL Geo查询

热门文章

  1. BUAA 2020 软件工程 提问回顾与个人总结
  2. mysqld_exporter监控mysql信息
  3. 21.7.31 test
  4. MD5函数(公共方法)
  5. Luogu 520题纪念
  6. hdu 4788 Hard Disk Drive (水题)
  7. poj 1704 Georgia and Bob (nim)
  8. 大数据中必须要掌握的 Flink SQL 详细剖析
  9. dart系列之:dart语言中的特殊操作符
  10. Flume面试题整理