<深入理解计算机系统>第七章读书笔记
2016-04-06 23:01
316 查看
<深入理解计算机系统>第七章读书笔记
链接
链接:将各种代码和数据部分收集起来并组合成为一个单一文件的过程。(这个文件可被加载或拷贝到存储器并执行)链接可以执行于编译,加载或运行时。
静态链接:
两个主要任务:
1 符号解析:将目标文件中的每个全局符号都绑定到一个唯一的定义
2 重定位:确定每个符号的最终存储器地址,并修改对那些目标的引用
符号表:
typedef struct{ int name; //字符串表中的字节偏移,指向符号的以NULL结尾的名字 int value; //符号的地址,对于可重定位的模块是距定义目标的节起始位置的偏移。 int size; //目标大小(单位:字节) char type:4, //数据或函数 binding:4; //本地LOCAL/全局GLOBAL char reserved; char section; //到节头部表的索引 }Elf_Symbol;
每个符号都和目标的某个节相关联,由section字段表示。
section字段三个特殊的伪节
ABS:不该被重定位的符号。
UNDEF:未定义的符号,在本目标模块中引用,但在其他地方定义。
COMMON:未被分配位置的未初始化数据目标。
Ndx=1表示.test节,Ndx=3表示.data节。
目标文件三种形式:
1可重定位目标文件
2可执行目标文件
3共享目标文件
共享目标文件(共享库)是在运行时由动态链接器链接和加载,或者隐含地在调用程序被加载和开始执行时,或者根据需要在程序调用dlopen库的函数。
加载器将可执行文件的内容映射到存储器,然后调用动态链接器,通过加载共享库和重定位程序中的引用来完成链接任务。
Fpic
被编译为位置无关代码的共享库可以加载到任何地方,也可以在运行时被多个进程共享
编译库代码,使得不需要链接器修改库代码就可以在任何地址加载和执行这些代码。
用户对GCC使用-fPIC选项指示GNU生成PIC代码
处理目标文件的工具
AR:创建静态库,插入、删除、列出和提取成员。
STRINGS:列出一个目标文件中所有可打印的字符串。
STRIP:从目标文件中删除符号的信息。
NM:列出一个目标文件的符号表中定义的符号。
SIZE:目标文件中节的名字和大小。
READELF:显示一个目标文件的完整结构,包括ELF头中的编码的所有信息。包含SIZE和NM的功能。
OBJDUMP:所有二进制工具之母,能够显示一个目标文件中所有的信息。它最大的作用是反汇编.text节中的二进制指令。
LDD:列出一个可执行文件在运行时所需要的共享库。
相关文章推荐
- TCP/IP基础(四)
- 《常见算法和数据结构》元素排序(2)——希尔排序(动画)
- 树的前序遍历非递归、中序遍历非递归、后序遍历非递归
- 《深入理解计算机系统》读书笔记:第七章 链接
- linux网络配置命令之ifconfig、ip和route
- Ping测试网络连接状况
- 计算机
- 20135323符运锦----《深入理解计算机系统》第七章知识点总结
- 模拟实现操作系统内存分配与回收
- 一次复杂而简单的网络诊断
- 牛客网每日打卡-网络基础-20160406
- PHP学习(十一)--数组与数据结构
- [C#基础]网络编程(三):protobuf-net
- ARM CEO:汽车将成超级计算机,把AI推进到智能硬件
- <meta>中的http-equiv的参数值
- 模拟实现操作系统调度算法
- https://github.com/oneuijs/You-Dont-Need-jQuery
- bzoj 1061: [Noi2008]志愿者招募(线性规划+网络流)
- 《常见算法和数据结构》元素排序(1)——简单排序(附动画)
- 计算机史