第二章 编译和链接

预处理(prepressing)

  gcc -E hello.c -o hello.i
  cpp hello.c > hello.i

编译(compilation)

  gcc -S hello.i -o hello.s

汇编(Assembly)

  as hello.s -o hello.o
  gcc -c hello.s -o hello.o

链接(Linking)

静态链接: 模块的拼接过程

  ld -static crt1.o

汇编器代替人工计算目标地址(Symbol)

  1. 地址和空间分配
  2. 符号决议
  3. 重定位

PLT工作原理

第二章 编译和链接_第1张图片
GOT表结构
第二章 编译和链接_第2张图片
PLT
动态重定位表
第二章 编译和链接_第3张图片
可重定位表结构
  ELF32_R_SYM(Elf32_Rel->r_info) = (Elf32_Rel->r_info) >> 8
  重定位项对应符号在符号表中的下标
  ELF32_R_TYPE(0x607) = 7,对应R_386_JUMP_SLOT

你可能感兴趣的:(第二章 编译和链接)