Load-time relocation of shared libraries (2011)
7 months ago
- #load-time-relocation
- #shared-libraries
- #linux
- 阐述现代操作系统如何通过加载时重定位使用共享库,重点分析32位x86架构上的Linux系统
- 共享库又称共享对象、动态共享对象(DSO)或动态链接库(DLL)
- Linux将可执行文件加载到固定内存地址,ELF头部会指定入口点地址
- 链接器将内部符号引用解析到固定位置,但共享库需要额外的重定位操作
- 通过共享库和驱动程序示例演示加载时重定位,展示'myglob'等符号的重定位过程
- Linux的地址空间布局随机化(ASLR)机制增加了重定位地址追踪难度但仍可管理
- 使用'dl_iterate_phdr'函数在运行时检查已加载共享库及其内存段
- 以'ml_util_func'为例解析函数调用的重定位机制,说明'R_386_PC32'重定位类型的作用
- 讨论为何全局符号需要调用重定位而静态函数不需要
- 相比位置无关代码(PIC),加载时重定位更易理解且在部分系统上具有性能优势
- 总结指出理解加载时重定位是掌握位置无关代码等复杂概念的基础