linux常用头文件详解
3)a_data——该字段含有数据段的长度值,字节数。
4)a_bss——含有bss段的长度,内核用其设置在数据段后初始的break(brk)。内核在加载程序时,这段可写内存显现出处于数据段后面,并且初始时为全零。
5)a_syms——含有符号表部分的字节长度值。
6)a_entry——含有内核将执行文件加载到内存中以后,程序执行起始点的内存地址。
7)a_trsize——该字段含有代码重定位表的大小,是字节数。
8)a_drsize——该字段含有数据重定位表的大小,是字节数。
在a.out.h头文件中定义了几个宏,这些宏使用exec行文件中各个部分(节)的位置偏移值。这些宏有:
◆N_BADMAG(exec)。如果a_magic字段不能被识别,则返回非零值。
◆N_TXTOFF(exec)。代码段的起始位置字节偏移值。
◆N_DATOFF(exec)。数据段的起始位置字节偏移值。
◆N_DRELOFF(exec)。数据重定位表的起始位置字节偏移值。
◆N_TRELOFF(exec)。代码重定位表的起始位置字节偏移值。
◆N_SYMOFF(exec)。符号表的起始位置字节偏移值。
◆N_STROFF(exec)。字符串表的起始位置字节偏移值。
重定位记录具有标准的格式,它使用重定位信息(relocation_info)结构来描述,如下所示:
该结构中各字段的含义如下:
1)r_address——该字段含有需要链接程序处理(编辑)的指针的字节偏移值。代码重定位的偏移值是从代码段开始处计数的,数据重定位的偏移值是从数据段开始处计算的。链接程序会将已经存储在该偏移处的值与使用重定位记录计算出的新值相加。
2)r_symbolnum——该字段含有符号表中一个符号结构的序号值(不是字节偏移值)。链接程序在算出符号的绝对地址以后,就将该地址加到正在进行重定位的指针上。(如果r_extern比特位是0,那么情况就不同,见下面。)