CSAPP第七章Linking
Object Files
Object file 有三种形式
- Relocatable object file
- Executable object file
- Shared object file
Relocatable Object Files
CSAPP 书中选取的是ELF格式。
ELF从16字节的序列作为起始,这16字节规定了字的大小和机器的字节顺序(大端或者小端),ELH header剩下的内容帮助连接器分析解释这个object file。而各种sections的信息,如位置和大小,由section header table 给出,它包含了每个sections固定大小的入口。
sections的类型
- .te xt
编译后的机器码 - .rodata
只读数据,例如printf中的format strings 或者switch的jump tables - .data
初始化的全局和静态变量 - .bss
未初始化的全局和静态变量,并且这个section并不占据object file的实际磁盘空间,当程序运行时,这些变量会申请内存并初始化为0 - .symtab
symbol table,包含了函数和全局变量的信息。 - .rel.rext
是.text section中需要重定位的位置的列表,例如外部函数或者外部的局部变量。和并不包含没有用到的指令。 - .rel.data
包含这个object module中定义或者引用的全局变量的重定位信息。 - .debug
debugging symbol,只有用了-g选项编译才会产生 - .line
- .strtab
字符串表
CSAPP第七章Linking