静态链接大家并不陌生,本文将从二进制代码来分析静态链接的本质。
首先列出将要静态的链接的两个源文件,它们分别是a.c和b.c,最后链接成功的文件为ab。
a.c代码如下:
extern int shared;
extern void swap(int * ,int *);
int main(){
int a = 100;
swap( &a, &shared );
}
b.c代码如下:
int shared = 1;
void swap( int* a, int* b )
{
*a ^= *b ^= *a ^= *b;
}
首先使用命令 gcc -c a.c 和 gcc -c b.c 生成可重定位文件a.o和b.o。
接着使用命令objdump -h a.o和objdump -h b.o来查看可重定位文件的各个基本段。
分别显示如下:

本文深入探讨静态链接的本质,通过分析二进制代码,展示了如何将两个源文件a.c和b.c链接成ab。通过objdump命令查看各阶段的段信息,揭示了代码和数据段的合并过程,以及未定义变量和函数在链接后的正确地址处理,解释了静态链接中地址的计算方式。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



