linux常用头文件详解(9)
发布时间:2021-06-06
发布时间:2021-06-06
linux常用头文件详解
(1)执行头部分(exec header)。该部分中含有一些参数(exec结构),内核使用这些参数把执行文件加载到内存中并执行,而链接程序(ld)使用这些参数将一些模块文件组合成一个可执行文件。这是目标文件唯一必要的组成部分。
(2)代码段部分(text segment)。含有程序执行时被加载到内存中的指令代码和相关数据。可以以只读形式被加载。
(3)数据段部分(data segment)。这部分含有已经初始化过的数据,总是被加载到可读写的内存中。
(4)代码重定位部分(text relocations)。这部分含有供链接程序使用的记录数据。在组合目标模块文件时用于定位代码段中的指针或地址。
(5)数据重定位部分(data relocations)。类似于代码重定位部分的作用,但是用于数据段中指针的重定位。
(6)符号表部分(symbol table)。这部分同样含有供链接程序使用的记录数据,用于在二进制目标模块文件之间对命名的变量和函数(符号)进行交叉引用。
(7)字符串表部分(string table)。该部分含有与符号名对应的字符串。
每个目标文件均以一个执行数据结构(exec structure)开始。该数据结构的形式如下:
各个字段的功能如下:
1)a_magic——该字段含有三个子字段,分别是标志字段、机器类型标识字段和魔数字段,参见图11-1。不过对于Linux 0.12系统其目标文件只使用了其中的魔数子字段,并使用宏N_MAGIC()来访问,它唯一地确定了二进制执行文件与其他加载的文件之间的区别。该子字段中必须包含以下值之一:
◆OMAGIC。表示代码和数据段紧随在执行头后面并且是连续存放的。内核将代码和数据段都加载到可读写内存中。编译器编译出的目标文件的魔数是OMAGIC(八进制0407)。
◆NMAGIC。同OMAGIC一样,代码和数据段紧随在执行头后面并且是连续存放的。然而内核将代码加载到了只读内存中,并把数据段加载到代码段后下一页可读写内存边界开始。
◆ZMAGIC。内核在必要时从二进制执行文件中加载独立的页面。执行头部、代码段和数据段都被链接程序处理成多个页面大小的块。内核加载的代码页面是只读的,而数据段的页面是可写的。链接生成的可执行文件的魔数即是ZMAGIC(0413,即0x10b)。
2)a_text——该字段含有代码段的长度值,字节数。
下一篇:在wps里打印32开小册子流程