ELF 文件格式查找符号的共享对象

逆向工程 小精灵 动态链接
2021-06-13 10:27:22

(在 Windows 中)PE 文件格式包含导入表,Module\Dll Name它告诉 PE 加载器在哪里搜索符号,例如KERNEL32.dll -> CreateFileW

在ELF文件格式也Symbol tableinfo现场告诉如果符号是Global\Local\Weak\etc.

我的问题是 Unix 加载器如何知道模块是什么,共享对象在哪里搜索这个符号,例如 ???? -> snprintf

我注意到 objdump 可以转储此信息objdump -T /bin/ls在此处输入图片说明 GLIBC_2.2.5 snprintf

对 ELF 文件格式有更多了解的人能否对 Unix 动态链接有所了解?

1个回答

Unix 加载器如何知道模块是什么,共享对象在哪里搜索这个符号

简短的回答:没有。它只是搜索已加载模块的整个列表,直到找到(或未找到)符号。通过版本化符号可以实现对更精确符号匹配的小程度控制,但除此之外,它几乎是免费的。

根据设计,ELF 符号空间是全局的(或平面的),因此任何符号都可以被另一个模块抢占例如,当通过 LD_PRELOAD_LIBRARY 环境变量挂钩符号时使用