目标文件有三种形式:

  • 可重定位目标文件
    • 包含二进制代码和数据,其形式可以在编译时与其他可重定位目标文件合并起来,创建一个可执行目标文件
  • 共享目标文件
    • 一种特殊类型的可重定位目标文件,可以在加载或者运行时被动态地加载进内存并链接
  • 可执行目标文件
    • 包含二进制代码和数据,其形式可以被直接复制到内存并执行

目标模块
一个目标模块(object module)就是一个字节序列
一个目标文件(object file)就是一个以文件形式存放在磁盘中的目标模块

目标文件格式

  • a.out 格式
    • Unix 系统使用(直到今天,可执行文件仍然称为 a.out 文件)
  • 可移植可执行(Portable Executable,PE)格式
    • Windows 使用
  • Mach-O 格式
    • MacOS-X 使用
  • 可执行可链接格式(Executable and Linkable Format,ELF
    • 现代 x86-64 Linux 和 Unix 系统

目标文件中每个都有一个固定大小的条目(entry)