gcc生成执行文件过程为:源文件(*.c文件)编译成对象文件(*.o文件);
链接程序ld,把对象文件(*.o文件)链接成可执行程序。
因此要透彻链接的过程, 需要先了解对象文件(*.o文件)是怎样构成的?
下面用个简单的例子来说明:
#includeint global_var=5;extern int other_file_var;int main(){ int a=1;
int b=a other_file_var; return 0;
}gcc -c test.c -o test.o 生成test.o;
查看test.o内容(vim test.o):
图1
看到的是一堆乱码,因为查看方式不对, 就像mp3格式的文件需要用音乐播放器才能播放一样,对象文件(*.o)是elf格式的, 需要用objdump, readelf 工具来查看。
从elf格式的官方文档,可以了解到elf格式文件的结构如下图所示:
图2
下面将一个个部分来分析。
1. ELF文件头(Header)分析
readelf -h tes