专栏首页sickworm深入理解计算机系统(第三版)/ CSAPP 杂谈,第7章:链接

深入理解计算机系统(第三版)/ CSAPP 杂谈,第7章:链接

  • 链接器主要完成符号解析和重定位两个任务。
  • 目标文件有三种形式:可重定位目标文件(.so);可执行目标文件(.exe),共享目标文件(.so)。
  • linux x86-64 的可重定位目标文件使用 ELF 格式。ELF 头的前 16 字节描述文件对应系统的字的大小和字节顺序,后面还有头的大小,目标文件类型,机汽类型,各 section header 的文件偏移,以及它们的大小和数量。
  • 一般 ELF 包含以下几种 section:
    • .text:可执行机器码
    • .rodata:只读数据,如字符串常量和 switch 跳转表
    • .data:已初始化的全局和静态变量
    • :bss:未初始化或初始化为 0 的全局和静态变量。不占空间,仅仅为占位符。运行时在内存动态生成。
    • .symtab:符号表,存放定义和引用的函数与全局变量的信息。使用 STRIP 命令可以去掉符号表。
    • .rel.text:.text 中位置的列表,是重定位信息。链接器把目标文件组合起来的时候,需要修改这些位置,以让各个目标文件链接起来。一般来说,修改的是外部函数或者引用全局变量的位置,调用的本地函数的位置则不需要修改。
    • .rel.data: 引用或定义的所有全局变量的重定位信息。
    • .debug:调试符号表。用 -g 选项编译的时候才会得到这张表。
    • .line:源程序的行号与 .text 机器码的对应关系。用 -g 选项编译的时候才会得到这张表。
    • .strtab:字符串表,包括 .symtab,.debug,节头名字。以 null 结尾的字符串序列。

—- 2018.12.14 —-

  • .symtab 存储各 section 重定位信息
  • 弱全局符号是未赋值的全局符号,会被强全局符号覆盖,包括类型,所以容易导致类型不匹配的细微的bug;强全局符号是初始化的全局符号,会互相冲突。弱全局符号分配在 COMMON section 中,强全局符号分配在 .bss 中。
  • 静态库用于共享重复的代码,链接器仅会拷贝需要的函数。也可以通过参数拷贝所有函数。
  • gcc 的静态库链接是按顺序进行的。遇到目标文件 .o 时会把未定义和已定义的符号保存起来,遇到存档文件 .a 时,除了前面的操作,还会把 .a 的成员符号与未定义的符号比较,把匹配的成员符号对应的 .o 链接起来。这样的话因为是顺序的,如果把静态库放在前面,则会错过后面目标文件的匹配,从而在链接完所有文件,却还是有未定义符号,结果编译报错。
  • 所以一般做法是静态库文件放在最后。如果 .a 库相互之间也有依赖,则需要将 .a 库排序。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 深入理解计算机系统(第三版)/ CSAPP 杂谈,第10章:系统级I/O

    sickworm
  • Launcher3无图标问题

    机器(8寸,默认竖屏)第一次烧录完成后,以横放姿势启动,发现Launcher没有图标,而竖屏启动是没有这个问题的。在测试过程中发现,在设置中clear data...

    sickworm
  • 比特币要解决什么问题?

    首先,人民币是有价值的。为什么这些人民币纸币有价值呢?因为这是国家发行的,而国家说他是有价值,我们人民群众也认可国家。所以,人民币可以在我们之间交易,2元人民币...

    sickworm
  • 《程序员的自我修养》第三章学习笔记

    1, 编译器编译源代码生成的文件叫做目标文件。 从结构上说,是编译后的可执行文件,只不过还没有经过链接 3.1 目标文件的格式 1,可执行文件的格式: Wind...

    xcywt
  • 中兴智能视觉大数据报道:人类的大脑应当永远比人工智能强

    中兴智能视觉大数据报道:《美国科学院院刊》刊发的一份研究报告认为,在过去几十年里,人们的智商(IQ)测试分数一直在缓慢下降。瑞典研究人员对20世纪70年代至20...

    用户2155938
  • 总结java中创建并写文件的五种方式-JAVA IO基础总结第一篇

    在java中有很多的方法可以创建文件写文件,你是否真的认真的总结过?下面笔者就帮大家总结一下java中创建文件的五种方法。

    字母哥博客
  • 如何用人工智能破解罗一笑事件的“道德绑架”困局?

    镁客网
  • 细说CVE-2010-2883从原理分析到样本构造

    可能是各位大佬都比较忙的缘故,在学习了网上各种前辈们的漏洞报告之后,总感觉叙述的不够详细,小白理解起来较为困难。因此秉承着前人栽树后人浇水的原则,我也想尝试写一...

    FB客服
  • “汇新杯”新兴科技成果专项赛——人工智能

    为深入贯彻落实党的十九大报告中提出的“加快建设创新型国家”国家战略,根据《中国制造2025》、《国务院关于深化“互联网+先进制造业”发展 工业互联网的指导意见》...

    创成汇创新创业大赛
  • 腾讯云批量计算型BC1实例配置性能使用场景及注意事项

    腾讯云批量型实例具有最优单位核时性价比,适用于渲染、基因分析、晶体药学等短时频繁使用超大规模计算节点的计算密集型应用。InstanceTypes分享腾讯云批量计...

    用户2416682

扫码关注云+社区

领取腾讯云代金券