linux下的a.out文件
在使用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 数据重定向表的大小
linux下的a.out文件的更多相关文章
- linux下生成core dump文件方法及设置
linux下生成core dump文件方法及设置 from:http://www.cppblog.com/kongque/archive/2011/03/07/141262.html core ...
- linux下恢复误删除的文件方法(ext2及ext3)
linux下恢复误删除的文件方法(ext2及ext3) 2009-12-19 15:23:47 分类: LINUX 如果是ext2文件系统的,直接用debugfs是可以恢复出来的,但对于ext3,d ...
- linux下分卷tar.bz文件的合并并解压缩
linux下分卷tar.bz文件的合并并解压缩 例: linux.tar.bz2.001;linux.tar.bz2.002;linux.tar.bz2.003; 首先 cat linux.tar.b ...
- linux下php上传文件注意
linux下php上传文件注意1.修改上传目录权限linux 修改某目录下所有所有子目录权限chmod -R 777 html修改某目录为任何用户都用写读执行权限chmod a+rwx html2.设 ...
- Linux下遍历目录及文件,更改权限
Linux下遍历目录及文件,更改权限 引言: 我在Linux下搭建android时,将eclipse及sdk复制到/usr/下时,总会出现无法读,无法写写样的问题. 解决方案: 有两个方案: 一.将复 ...
- 恢复Linux下被误删除的文件(笔记)
恢复Linux下被误删除的文件 [root@xuegod63 ~]# mount /dev/cdrom /mnt/ 分一个区:sda4 查找:extundelete 分一个区:sda4 [root ...
- linux下java调用.so文件的方法1: JNI
摘自http://blog.163.com/squall_smile/blog/static/6034984020129296931793/ https://my.oschina.net/simabe ...
- Linux 下 Vi 配置文件 .vimrc 文件
Linux 下 Vi 配置文件 .vimrc 文件 配置 vim 的方法是在用户主目录下建立个.vimrc文件,我一般使用root帐户,所以就在/root/下建立一个.vimrc文件:vi /root ...
- Linux下 两台机器文件/文件夹 相互拷贝
Linux下 两台机器文件/文件夹 相互拷贝 设有两台机器 :A:*.101及 B:*.102. 把A下的.temp/var/a.txt拷贝到B机器的/text/目录下: 进入B机器:scp root ...
- Linux下查看alert日志文件的两种方法
--linux下查看alert日志文件的两种方法: --方法1: SQL> show parameter background_dump_dest; NAME TYPE VALUE ------ ...
随机推荐
- BasicDataSource的配置参数
参数 描述 username 传递给JDBC驱动的用于建立连接的用户名 password 传递给JDBC驱动的用于建立连接的密码 url 传递给JDBC驱动的用于建立连接的URL driverClas ...
- Java Web学习过程的思维导图
今天找文件,无意中翻到老师前段时间总结的知识点.觉得应该有点用处,所以分享给大家. 第一次在博客园发表,如有错误,还请指正.
- 机器学习实战(一)kNN
$k$-近邻算法(kNN)的工作原理:存在一个训练样本集,样本集中的每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对于关系.输入没有标签的新数据后,将新数据的每一个特征与样本集中数据对应的 ...
- SpringMVC问题- MultipartConfig 配置问题以及解决方式
http://www.cnblogs.com/weilu2/p/springmvc_fileupload_with_servlet_3_0.html
- JavaScript:异步 setTimeout
setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式. function showDate(){ var date=new Date(); console.log(date); } ...
- UDP server & client
Server: import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; ...
- PAT线性结构_一元多项式求导、按给定步长反转链表、出栈序列存在性判断
02-线性结构1. 一元多项式求导 (25) 设计函数求一元多项式的导数.(注:xn(n为整数)的一阶导数为n*xn-1.) 输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过100 ...
- iptables参数详解
iptables参数详解 搬运工:尹正杰 注:此片文章来源于linux社区. Iptalbes 是用来设置.维护和检查Linux内核的IP包过滤规则的. 可以定义不同的表,每个表都包含几个内部的链,也 ...
- grunt 入门学习
前端工作流,Grunt上手指南 Posted@2013-04-20 7:15 a.m. CategoriesGrunt , javascript 我想先花点时间回忆一下作为一个前端需要做的工作(Lo ...
- (转)Spring JdbcTemplate 方法详解
Spring JdbcTemplate方法详解 文章来源:http://blog.csdn.net/dyllove98/article/details/7772463 JdbcTemplate主要提供 ...