linux下的a.out文件
.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文件相关推荐
- 过滤Linux下不同大小的文件,linux查找当前目录下 M/G 大小的文件,删除Linux下指定大小的文件
过滤Linux下不同大小的文件,linux查找当前目录下 M/G 大小的文件,删除Linux下指定大小的文件 find ./ -type f -size +1G| xargs rm 在清理系统日志文件 ...
- Linux下分割与合并文件的方法
Linux下分割与合并文件的方法 切割合并文件在linux下用split和cat就可以完成.下面举些实例进行说明. 1.文件切割 文件切割模式分为两种: 文本文件 二进制模式. 1.1文本模式 文本模 ...
- 关于在linux下出现stdio.h文件不存在等gcc标准库不能找到的解决的方法
关于在linux下出现stdio.h文件不存在等gcc标准库不能找到的解决的方法 参考文章: (1)关于在linux下出现stdio.h文件不存在等gcc标准库不能找到的解决的方法 (2)https: ...
- linux 下重名名文件
linux 下重名名文件 最经在使用linux的时候,用到重名的功能,在网上找了一下,找到一下方法: 使用mv命令重名名: 原理:使用 mv 移动文件的功能,见当前文件以要修改的名字移动到当前文件夹, ...
- mysql 日志 超过 m,linux 下查找大日志文件,比如大于500M的文件
在实际生产环境中,有的时候有些文件我们不知道占用多大,这个时候我们需要进行查找命令来进行查看占用文件的大小,从而达到文件的清理,释放磁盘,保障磁盘充足,让网站资源不浪费,稳定运行,那么我们需要在lin ...
- linux中mysql导入文件,linux下mysql导入sql文件命令
Linux下我们提供导入sql文件可以得到数据.下面由学习啦小编为大家整理了linux下mysql导入sql文件命令的相关知识,希望对大家有帮助! linux的mysql导入sql文件命令详解 lin ...
- linux输密码复制,在Linux下用scp复制文件无需输入密码的技巧
当两台linux主机之间要互传文件时可使用scp命令来实现,建立信任关系之后可不输入密码.把你的本地主机用户的ssh公匙文件复制到远程主机用户的~/.ssh/authorized_keys文件中假设本 ...
- 两个文件比较 linux,linux下比较2个文件
linux下比较2个文件的不同,分两种(文本文件和二进制文件) 一.文本文件比较 1.如果想对两个有序的文件进行比较,可以使用comm命令. 语法:comm [- 123 ] file1 file2 ...
- Linux下用vi 打开文件出现乱码
环境 RedHat Linux 9 + VWWare 8.0 + SSH 3.2.9 + Putty 0.62 + MySQL 3.2 问题 Linux下用vi 打开文件出现乱码 解决 强烈推荐参考此 ...
- linux误删 bin目录,记linux下rm误删bin文件的解决方式
平常有个坏习惯,删文件为了快点,喜欢用rm xx*,删除一些关键词文件.今天为了删/bin下几个含有mix关键词的文件,使用命令rm mix*.手贱,mix和*之间多了个空格...灾难发生了!bin下 ...
最新文章
- 输入4个同学的姓名学号,语文数学英语信息计算平均成绩,按平均成绩高低排序输出java,c++实现
- 日本机器人实力大盘点,和Atlas的高调刷屏相比,日本机器人的默默崛起更让人忌惮...
- python互斥锁_Python多线程如何使用互斥锁
- Openstack组件部署 — Networking service_Compute Node
- asp用于取代什么技术_.NET的未来:关于.NET5,每个.Net开发人员必须知道什么
- 实现div可以调整高度(div实现resize)
- gradle入门_Gradle入门:简介
- IT餐馆—第二十五回 结对
- 光盘安装linux16.04,cobbler安装ubuntu 16.04巨慢
- c# richtextbox转html,C# RichTextBox 输入内容转自定义样式图像
- web前端全部课件(html5+CSS3+javascript+dom+bom+jquery+jqm+bootstrap+angular+ext+weixin+less)...
- python物业管理系统_小型物业管理系统的设计与实现研究背景及意义
- carplay是否可以用安卓系统,carplay能连接安卓手机吗
- 【Android系统源码修改】获取屏幕亮度、设置屏幕亮度
- java word 复制_Java 复制Word文档
- js获取url链接中的域名部分
- python count函数时间复杂度_关于python:了解如何测量函数的时间复杂度
- Textarea输入框失去焦点时隐藏手机键盘
- 2022年全球市场高纯度橙皮苷粉末总体规模、主要生产商、主要地区、产品和应用细分研究报告
- Python文件操作与PDF处理
热门文章
- 求两个集合是否有交集 c语言_高中数学:集合与函数概念知识点总结
- mysql jdbc url设置时区
- 【win10】如何在桌面上,显示我的电脑
- WebMvcConfigurer
- gamma分布_深度学习需要掌握的 13 个概率分布(附代码)
- echarts4离线使用文档_适合写API接口文档的管理工具有哪些?
- java布尔类型比较器_Java 8比较器类型推论非常困惑
- stm32 交换机芯片_基于STM32的全链路语音交互 - stm32/stm8 - 电子工程世界
- centos g++ 升级_今夏最潮装备来了!G-SHOCK推出seethru 冰韧系列
- php 能处理死循环吗,详解PHP死循环写法和作用