实现动态连接十分简单,只需要在加载elf文件时判断是否存在interpret段,如果存在就加载对应的动态连接器, 将动态连接器内容映射进内存并将程序入口设置为动态连接器的入口。接下来动态连接器会完成剩下的连接工作。

尽管原理很简单,但由于动态连接涉及的系统调用较多,在加入动态连接后很容易出bug。 未正确处理mmap,没压入或压入了错误的aux数组,fstat返回空结构体都可能导致动态连接失败。 值得一提的是,这里使用的动态连接器是musl libc,它既是动态连接器又是函数库, 测例中使用的函数以及动态连接的过程都可以从这个库的代码中找到。阅读这部分代码会对调试程序有帮助。