动态链接器(Dynamic linker)是操作系统的一部分,负责按照可执行程序运行时的需要装入与链接共享库。装入是指把共享库在永久存储上的内容复制到内存,链接是指填充跳转表(jump table)与重定位指针。

Windows操作系统

类Unix操作系统

ld.soUnix类Unix系统上的动态链接器,针对ELF文件格式

加载顺序

应用程序需要使用动态链接库里的函数时,由ld.so负责加载。搜索动态链接库的顺序依此是

  • 环境变量LD_AOUT_LIBRARY_PATH(dbg版本)、LD_LIBRARY_PATH(release版本);在Linux中,LD_PRELOAD指定的目录具有最高优先权[1]
  • 缓存文件/etc/ld.so.cache。此为上述环境变量指定目录的二进制索引文件。更新缓存的命令是ldconfig
  • 默认目录,先在/lib中寻找,再到/usr/lib中寻找。

安全性

骇客可以通过GOT覆写英语Global offset table,让具有特权的应用程序加载恶意动态链接库,从而导致攻击行为。所以,对于与setuidsetgid相关的应用程序,动态链接器只被允许在默认目录中寻找合法动态链接库

参考文献

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.