Linux Linker
来自百度知道。
提炼一下:
1、模块在编译过程中就会生成符号表,符号表记录模块中的全局函数,全局变量。这些是可以给外部调用的,可以导出符号表。如何在本模块内没有定义,就将此符号定义为“未定义”。在链接阶段会在其他模块符号表中查找此符号。一个符号代表的是一个地址位置,但是相对位置,相对于本模块起始(本模块起始设置为0)。
2、链接器在链接过程中,会扫描各个模块的符号表,得到一个“全局符号表”,这样每一个符号都有一个地址对应。将各模块中符号引用的地方换成定义处的地址,这就叫符号解析。
3、程序的链接过程会整合各个模块的端,如按代码段、数据段、未初始化的数据段等重新组合。这里就会有一个问题,A.text中调用了B.text.Symbol1,因为重新组合而改变了位置,那么A.text中调用B.text.Symbol1的代码就得重改。这就是重定位。
4、静态库在链接时已经被组合到程序(如linux-elf文件)中。如A和B都用到静态库中的所有代码,那么A B的elf中都包含静态库代码。
5、动态库在加载的时候被搬到内存中,且存在被不同程序映射到不同地址空间的可能(如两个应用程序映射虚拟地址都是0~0x1000的反面情况)。那么在动态库中就不应该出现绝对地址引用,引入GOT技术。
新的知识点:程序编译生成符号表,符号与地址对应,链接中进行符号解析,然后再进行内存分配(按段重组),链接器再进行模块内未定义符号重定位。
Linux Linker的更多相关文章
- Linux Linker Script
先推荐两个网页: http://blog.csdn.net/muyuyuzhong/article/details/7755291 http://www.cnblogs.com/liulipeng/a ...
- Linux 驱动开发
linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, ...
- Nginx源码完全注释(8)ngx_errno.c
errno.h中的strerror(int errno)可以确定指定的errno的错误的提示信息.在 Nginx 中,将所有错误提示信息预先存储在一个数组里,而预先确定这个数组的大小,是在自动化脚本中 ...
- Linux Dynamic Shared Library && LD Linker
目录 . 动态链接的意义 . 地址无关代码: PIC . 延迟版定(PLT Procedure Linkage Table) . 动态链接相关结构 . 动态链接的步骤和实现 . Linux动态链接器实 ...
- Linux Kernel系列三:Kernel编译和链接中的linker script语法详解
先要讲讲这个问题是怎么来的.(咱们在分析一个技术的时候,先要考虑它是想解决什么问题,或者学习新知识的时候,要清楚这个知识的目的是什么). 我在编译内核的时候,发现arch/arm/kernel目录下有 ...
- linux 修改 elf 文件的dynamic linker 和 rpath
linux 修改 elf 文件的dynamic linker 和 rpath https://nixos.org/patchelf.html 下载地址 https://nixos.org/releas ...
- Linux ToolChain (二) --- Linker (1)链接选项 -L -rpath -rpath-link
一.动态库的链接和链接选项-L,-rpath-link,-rpath (1). 现代连接器在处理动态库时将链接时路径(Link-time path)和运行时路径(Run-time path)分开, 用 ...
- Linux下服务器端开发流程及相关工具介绍(C++)
去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把自己接触到的这些东西记录下来,为后来者提供参考,相当于一个路 ...
- linux下mono播放PCM音频
测试环境: Ubuntu 14 MonoDevelop CodeBlocks 1.建立一个共享库(shared library) 这里用到了linux下的音频播放库,alsa-lib. al ...
随机推荐
- 【Luogu】P1850换教室(期望DP)
题目链接 又一道面向题解编程的恶心神题.真是叫人质壁分离…… 设f[i][j][k]表示考虑了前i节课,尝试了j次,当前申请结果为k时消耗的体力值. 对于f[i][j][0]有两种情况:一是我们的主角 ...
- Luogu【P2904】跨河(DP)
题目链接在这里 此题DP.用一个前缀和一样的东西,把载i个奶牛的时间求出来,然后DP代码如下: ;i<=n;++i){ f[i]=que[i]; ;j<i;++j) f[i]=min(f[ ...
- Ignite集成Spark之IgniteDataFrames
下面简要地回顾一下在第一篇文章中所谈到的内容. Ignite是一个分布式的内存数据库.缓存和处理平台,为事务型.分析型和流式负载而设计,在保证扩展性的前提下提供了内存级的性能. Spark是一个流式数 ...
- Admin组件-----Django自带
1 list_display from django.contrib import admin # Register your models here. from app01.models impor ...
- 一个关于 jquery 和 php 的 jsonp 例子(与后台PHP成功通信)
<script> $(document).ready(function(){ $.ajax({ url:'http://localhost/test/jsonp.php', dataTyp ...
- XCTFreverse第一道DMD
MD5解一次密即可
- Java并发编程实战 读书笔记(二)
关于发布和逸出 并发编程实践中,this引用逃逸("this"escape)是指对象还没有构造完成,它的this引用就被发布出去了.这是危及到线程安全的,因为其他线程有可能通过这个 ...
- Javascript:如何调用全局变量?
怎样使用全局变量呢? window.globalVariableName 参考: https://blog.csdn.net/zyz511919766/article/details/7276089
- poj 2135 Farm Tour 最小费最大流
inf开太小错了好久--下次还是要用0x7fffffff #include<stdio.h> #include<string.h> #include<vector> ...
- centos 7 安装官方LAMP(Apache+PHP5+MySQL)
启用Apache2 yum install httpd systemctl start httpd.service systemctl status httpd systemctl enable ht ...