编程语言
首页 > 编程语言> > 程序员的自我修养2.1 静态链接-两步链接

程序员的自我修养2.1 静态链接-两步链接

作者:互联网

静态链接

#include<stdio.h>
int global_init_val = 84; //.data
int global_uninit_val;
__attribute__((section("FOO"))) int global = 42;//FOO
int main(){
        int init_a = 20;
        int uninit_b;
        static int static_b = 40;//.data
        static int static_uninit_c;
        return 0;
}

两步链接

  1. 空间和地址分配
    1. 分配虚拟空间
    2. 更新符号地址
  2. 符号解析和重定位

空间和地址分配

  1. 分配虚拟空间

在这里插入图片描述

  1. 将所有目标文件的符号表以及相关信息整合成一个全局符号表,通过给每个符号加上一个偏移量就可以得出符号的虚拟地址,比如main函数原本相对.text的偏移是X(这个y通过查看该目标文件的符号表就可以知道readelf -s hello2.o),而分配虚拟空间后,.text的虚拟空间是Y,所以main的最终的虚拟地址就是X+Y

符号解析和重定位

标签:定位,符号,int,虚拟空间,程序员,文件,2.1,链接
来源: https://blog.csdn.net/weixin_42293059/article/details/120164280