linux常用头文件详解(8)

发布时间:2021-06-06

linux常用头文件详解

从0.96版内核开始,Linux系统直接采用了GNU的同名头文件a.out.h。因此造成在Linux 0.9x下编译的程序不能在Linux 0.1x系统上运行。下面对两个a.out头文件的不同之处进行分析,并说明如何让0.9x下编译的一些不是用动态链接库的执行文件也能在0.1x下运行。

Linux 0.12使用的a.out.h文件与GNU同名文件的主要区别在于exec结构的第一个字段a_magic。GNU的该文件字段名称是a_info,并且把该字段又分成3个子域:标志域(Flags)、机器类型域(Machine Type)和魔数域(Magic Number)。同时为机器类型域定义了相应的宏N_MACHTYPE和N_FLAGS,如图14-1所示。

在Linux 0.9x系统中,对于采用静态库连接的执行文件,图中各域注释中括号内的值是该字段的默认值。这种二进制执行文件开始处的4个字节是:

0x0b, 0x01, 0x64, 0x00

而这里的头文件仅定义了魔数域。因此,在Linux 0.1x系统中一个a.out格式的二进制执行文件开始的4个字节是:

0x0b, 0x01, 0x00, 0x00

可以看出,采用GNU的a.out格式的执行文件与Linux 0.1x系统上编译出的执行文件的区别仅在机器类型域。因此我们可以把Linux 0.9x上的a.out格式执行文件的机器类型域(第3个字节)清零,让其运行在0.1x系统中。只要被移植的执行文件所调用的系统调用都已经在0.1x系统中实现即可。在开始重新组建Linux 0.1x根文件系统中的很多命令时,作者就采用了这种方法。

在其他方面,GNU的a.out.h头文件与这里的a.out.h没有什么区别。

14.2.3 a.out执行文件格式

Linux内核0.12版仅支持a.out(Assembly out)执行文件和目标文件的格式,虽然这种格式目前已经渐渐不用,而使用功能更为齐全的ELF(Executable and Link Format)格式,但是由于其简单性,作为入门的学习材料比较适用。下面全面介绍一下a.out格式。

在头文件a.out.h中声明了三个数据结构以及一些宏。这些数据结构描述了系统上目标文件的结构。在Linux 0.12系统中,编译产生的目标模块文件(简称模块文件)和链接生成的二进制可执行文件均采用a.out格式。这里统称为目标文件。一个目标文件由7部分(7节)组成。它们依次为:

linux常用头文件详解(8).doc 将本文的Word文档下载到电脑

精彩图片

热门精选

大家正在看

× 游客快捷下载通道(下载后可以自由复制和排版)

限时特价:7 元/份 原价:20元

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219