💡
原文中文,约1900字,阅读约需5分钟。
📝
内容提要
本文介绍了Linux下的动态链接机制,比较了动态链接与静态链接的优缺点。静态链接生成的可执行文件较大,更新维护困难;动态链接在运行时链接模块,节省空间且易于维护,但运行性能略低。文中还解释了全局偏移表(GOT)和过程链接表(PLT)的工作原理。
🎯
关键要点
- 动态链接和静态链接是生成可执行文件时使用的两种不同链接机制。
- 静态链接生成的可执行文件较大,更新维护困难,且每个可执行文件中都有所需函数的副本。
- 动态链接在程序运行时链接模块,更新维护较容易,节省空间,但运行性能略低于静态链接。
- 全局偏移表(GOT)将符号映射到绝对内存地址,过程链接表(PLT)将函数映射到绝对内存地址。
- PLT 通过跳转到对应的 GOT 表寻找函数的实际地址,未调用前的内容指向下一个指令。
❓
延伸问答
动态链接和静态链接有什么区别?
动态链接在程序运行时链接模块,节省空间且易于维护,而静态链接在编译时将所有代码整合到可执行文件中,生成的文件较大且更新困难。
动态链接的优缺点是什么?
动态链接的优点包括更新维护较容易和节省空间,缺点是运行性能略低于静态链接。
全局偏移表(GOT)和过程链接表(PLT)是什么?
全局偏移表(GOT)将符号映射到绝对内存地址,过程链接表(PLT)将函数映射到绝对内存地址,二者用于动态链接过程中的地址解析。
静态链接的优缺点是什么?
静态链接的优点是运行速度快和避免依赖问题,缺点是更新维护困难和浪费空间。
动态链接如何解决静态链接的缺点?
动态链接在程序运行时才将模块链接,避免了静态链接中每次更新都需重新下载整个程序的问题,并节省了存储空间。
动态链接的实现方式有哪些?
动态链接的实现方式因系统而异,主要是在程序运行时对未引用的符号进行标识,并生成额外的代码片段(PLT表)。
➡️