💡
原文中文,约9600字,阅读约需23分钟。
📝
内容提要
本文介绍了如何将多个ELF .o文件链接成一个可执行文件,包括模拟函数调用和重定位的过程,处理不同文件之间的函数调用和重定位,以及实现多文件链接器所需的额外工作。
🎯
关键要点
- 本文介绍了如何将多个ELF .o文件链接成一个可执行文件。
- 实现过程包括模拟函数调用和重定位的过程。
- 处理不同文件之间的函数调用和重定位是关键。
- 单文件输入时,所有内容由该文件提供,易于实现。
- 多文件输入时,可能出现依赖情况,需要处理函数声明和定义。
- 汇编语言中模拟函数调用的场景,展示了如何将代码分成多个文件。
- 汇编器生成重定位信息,链接器根据这些信息填入正确的地址。
- R_X86_64_PLT32和R_X86_64_PC32是重定位类型,涉及相对地址计算。
- 链接器需要合并来自多个文件的同一section。
- 需要完善对section的重定位处理,记录不同.o文件的section相对位置。
- 维护符号表以找到符号对应的地址,计算重定位时使用。
- 最终实现的链接器支持多个ELF .o文件的链接,代码量约400行。
➡️