接着之前的文章,由于需要,对Linker这部分进行了比较深入的学习,主要是基于Linux ELF文件格式,本文参考了程序员的自我修养,深入理解计算机系统第七章链接,Linker & Loader, 和网上博客相关资源,Android Linker的源码版本是4.2.2. 在此与大家共享,也请大家多多指正~ (限于水平,难免会有错误、疏漏之处,请大家见谅) 下面是文章的目录架构: Contents 一、 ELF文件格式 2 1. ELF Header 3 2. Section Header Table 4 3. ELF重定位表(.rel.data or .rel.text) 6 4. ELF符号表(.symtab) 7 二、静态链接基础 8 1. 链接时重定位(Relocation) 9 2. 重定位表(Relocation Table) 10 3. 指令修正 11 三、动态链接基础 12 1. 可执行文件的装载 12 2. 动态链接之地址无关代码(PIC Position-independent Code) 15 3. 动态链接之延迟绑定(PLT Procedure Linkage Table) 16 4. 动态链接相关结构 18 5. 动态链接的步骤与实现 20 四、Android Dynamic Linker(基于Android 4.2.2源码剖析) 21 1. 初始启动代码: 21 2. Bootstrap:_linker_init 21 3. soinfo_link_image 25 4. 加载依赖共享库 29 5. 可执行映像的重定位操作 33 6. 扫尾 35