CSAPP 第七章 链接

7-1 编译器驱动程序

链接是将各种代码和数据收集并组合成一个文件的过程。

gcc -Og -o prog main.c sum.c

-Og 代码优化等级
-o prog 指定可执行文件的名字为prog

image

预处理

cpp -o main.i main.c 将源程序main.c翻译为main.i

  • cpp是c preprocessor
  • 可用 gcc -E -o main.i main.c 替代指令 -E 限制gcc只进行预处理

编译

cc -S -o main.s main.i

  • cc是c compiler
  • 可用 gcc -S -o main.s main.i 替代指令 -S 限制gcc只编译

汇编

as -o main.o main.s

  • as是assembler

链接

ld -static -o prog main.o sum.o

  • ld是链接器

运行

./prog

7-2 可重定位目标文件

gcc -c main.c

  • -c编译选项表示值进行编译和汇编不执行链接操作。

wc -c main.o

  • -c选项表示查看文件包含多少个字节

ELF:Executable and Linkable Format,可执行可链接格式。

反汇编 objdump -s -d main.o

  • .text 存已经编译好了的机器代码
  • .data 存初始化了且初始化不为0的全局变量。
  • .bss 存未初始化或初始化为0的全局变量(不占用实际的空间)
  • .roadata
    image

7-3 符号和符号表

接7-2另外的几个section

image

  • Symbol Table.symtab
posted @ 2024-06-05 01:32  _daybreak  阅读(4)  评论(0编辑  收藏  举报