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
    字符串表
作者

xiaomaotou31

发布于

2021-09-16

更新于

2021-10-01

许可协议

评论