当然这里,我更重要的是强调这个什么段,什么段。这以前就知道。但其实是对一个可以执行的c语言程序的分析。就好比你分析一篇作文。有标题。有段落。

.out文件就是扩展名为out的文件,它本身不代表任何信息。在Linux中判断文件是否是可执行文件,首先要看文件的属性是否是可执行的,它没有一个默认的扩展名表示此文件为可执行文件。为了方便,Linux中可执行文件一般都是没有扩展名的。
在使用gcc编程时,没有指定输入可执行文件名,默认生成可执行文件a.out文件。执行时必须键入命令 ./a.out,即要带上扩展名,如果键入./a 则不正确,因为它寻找a这个文件,而不是a.out这个文件。

a.out是由OMAGIC, NMAGIC, QMAGIC, 或者 ZMAGIC发展过来的一种可执行文件格式.
OMAGIC :在文件头之后就是各个段,但是部分文本段和数据段.
NMAGIC:和OMAGIC差不多,但是数据段在代码段之后加载之后就立即加载数据段,并且将代码段标示位只读.
ZMAGIC:只是增加了对页需求的支持.
QMAGIC:这种格式可以将文件头和代码段的第一页合并起来,这样可以节省空间.它一般会在虚拟地址的最低地址加载一页,来处里NULL地址引起的段错误.

一个典型的a.out文件由一下7部分组成,按顺序有这些段:
exec header:文件头
   这一段中含有一些参数,内核利用其中一些参数来把二进制文件加载到内存中并执行.ld利用另外一些参数来连接其它的二进制文件.这个段是唯一含有命令参数的.

text segment:代码段
   包括在程序执行时加载到内存中的机器码和相关数据.有可能是只读的.

data segment:数据段
   包括初始化过的数据变量.通常是加载到内存中的可写去中.

text relocations:代码重定向
   包含编译连接二进制文件时的记录,这些记录使用来更新代码段中的指针.

data relocations:数据重定向
   和代码重定向相似,区别是它针对于数据段的指针.

symbol table:符号表
   包含连接器对不同二进制文件中的变量,函数和地址之间的对应关系的记录.

string table:字符串表
   包含和符号名字相一致的字符串.

每一种二进制文件都是以这样的一个数据结构开始的:
           struct exec {
                   unsigned long   a_midmag;
                   unsigned long   a_text;
                   unsigned long   a_data;
                   unsigned long   a_bss;
                   unsigned long   a_syms;
                   unsigned long   a_entry;
                   unsigned long   a_trsize;
                   unsigned long   a_drsize;
           };
a_midmag:保存的是主机字节序, I由这些宏来访问其中的部分bit位: N_GETFLAG(), N_GETMID(), N_GETMAGIC(), 由宏 N_SETMAGIC().来设置这个字段.
a_text    代码段的大小Contains the size of the text segment in bytes.

a_data    数据段的大小Contains the size of the data segment in bytes.

a_bss     bss segment中字节数和被内核用来初始化数据段之后的BRK (bss = block started by symbol)//这里的理解还是有点问题

a_syms    符号表的大小

a_entry   保存在程序被内核加载到内存中后程序的起始地址,内核由此地址开始执行程序

a_trsize 代码重定向表的大小

a_drsize 数据重定向表的大小

转载于:https://www.cnblogs.com/zhangfeionline/p/5967671.html

linux下的a.out文件相关推荐

  1. 过滤Linux下不同大小的文件,linux查找当前目录下 M/G 大小的文件,删除Linux下指定大小的文件

    过滤Linux下不同大小的文件,linux查找当前目录下 M/G 大小的文件,删除Linux下指定大小的文件 find ./ -type f -size +1G| xargs rm 在清理系统日志文件 ...

  2. Linux下分割与合并文件的方法

    Linux下分割与合并文件的方法 切割合并文件在linux下用split和cat就可以完成.下面举些实例进行说明. 1.文件切割 文件切割模式分为两种: 文本文件 二进制模式. 1.1文本模式 文本模 ...

  3. 关于在linux下出现stdio.h文件不存在等gcc标准库不能找到的解决的方法

    关于在linux下出现stdio.h文件不存在等gcc标准库不能找到的解决的方法 参考文章: (1)关于在linux下出现stdio.h文件不存在等gcc标准库不能找到的解决的方法 (2)https: ...

  4. linux 下重名名文件

    linux 下重名名文件 最经在使用linux的时候,用到重名的功能,在网上找了一下,找到一下方法: 使用mv命令重名名: 原理:使用 mv 移动文件的功能,见当前文件以要修改的名字移动到当前文件夹, ...

  5. mysql 日志 超过 m,linux 下查找大日志文件,比如大于500M的文件

    在实际生产环境中,有的时候有些文件我们不知道占用多大,这个时候我们需要进行查找命令来进行查看占用文件的大小,从而达到文件的清理,释放磁盘,保障磁盘充足,让网站资源不浪费,稳定运行,那么我们需要在lin ...

  6. linux中mysql导入文件,linux下mysql导入sql文件命令

    Linux下我们提供导入sql文件可以得到数据.下面由学习啦小编为大家整理了linux下mysql导入sql文件命令的相关知识,希望对大家有帮助! linux的mysql导入sql文件命令详解 lin ...

  7. linux输密码复制,在Linux下用scp复制文件无需输入密码的技巧

    当两台linux主机之间要互传文件时可使用scp命令来实现,建立信任关系之后可不输入密码.把你的本地主机用户的ssh公匙文件复制到远程主机用户的~/.ssh/authorized_keys文件中假设本 ...

  8. 两个文件比较 linux,linux下比较2个文件

    linux下比较2个文件的不同,分两种(文本文件和二进制文件) 一.文本文件比较 1.如果想对两个有序的文件进行比较,可以使用comm命令. 语法:comm [- 123 ] file1 file2 ...

  9. Linux下用vi 打开文件出现乱码

    环境 RedHat Linux 9 + VWWare 8.0 + SSH 3.2.9 + Putty 0.62 + MySQL 3.2 问题 Linux下用vi 打开文件出现乱码 解决 强烈推荐参考此 ...

  10. linux误删 bin目录,记linux下rm误删bin文件的解决方式

    平常有个坏习惯,删文件为了快点,喜欢用rm xx*,删除一些关键词文件.今天为了删/bin下几个含有mix关键词的文件,使用命令rm mix*.手贱,mix和*之间多了个空格...灾难发生了!bin下 ...

最新文章

  1. 输入4个同学的姓名学号,语文数学英语信息计算平均成绩,按平均成绩高低排序输出java,c++实现
  2. 日本机器人实力大盘点,和Atlas的高调刷屏相比,日本机器人的默默崛起更让人忌惮...
  3. python互斥锁_Python多线程如何使用互斥锁
  4. Openstack组件部署 — Networking service_Compute Node
  5. asp用于取代什么技术_.NET的未来:关于.NET5,每个.Net开发人员必须知道什么
  6. 实现div可以调整高度(div实现resize)
  7. gradle入门_Gradle入门:简介
  8. IT餐馆—第二十五回 结对
  9. 光盘安装linux16.04,cobbler安装ubuntu 16.04巨慢
  10. c# richtextbox转html,C# RichTextBox 输入内容转自定义样式图像
  11. web前端全部课件(html5+CSS3+javascript+dom+bom+jquery+jqm+bootstrap+angular+ext+weixin+less)...
  12. python物业管理系统_小型物业管理系统的设计与实现研究背景及意义
  13. carplay是否可以用安卓系统,carplay能连接安卓手机吗
  14. 【Android系统源码修改】获取屏幕亮度、设置屏幕亮度
  15. java word 复制_Java 复制Word文档
  16. js获取url链接中的域名部分
  17. python count函数时间复杂度_关于python:了解如何测量函数的时间复杂度
  18. Textarea输入框失去焦点时隐藏手机键盘
  19. 2022年全球市场高纯度橙皮苷粉末总体规模、主要生产商、主要地区、产品和应用细分研究报告
  20. Python文件操作与PDF处理

热门文章

  1. 求两个集合是否有交集 c语言_高中数学:集合与函数概念知识点总结
  2. mysql jdbc url设置时区
  3. 【win10】如何在桌面上,显示我的电脑
  4. WebMvcConfigurer
  5. gamma分布_深度学习需要掌握的 13 个概率分布(附代码)
  6. echarts4离线使用文档_适合写API接口文档的管理工具有哪些?
  7. java布尔类型比较器_Java 8比较器类型推论非常困惑
  8. stm32 交换机芯片_基于STM32的全链路语音交互 - stm32/stm8 - 电子工程世界
  9. centos g++ 升级_今夏最潮装备来了!G-SHOCK推出seethru 冰韧系列
  10. php 能处理死循环吗,详解PHP死循环写法和作用