我的初步了解是:
.dynamic
包含可执行文件需要加载的库.dynsym
包含外部符号,例如setsockopt@GLIBC_2.0
.dynstr
包含函数需求的字符串
总体而言,我对这些部分如何共同创建一个二进制文件有些困惑 - 特别是.dynsym
和.dynstr
。因此,我的问题有两个方面。以上述语句是否正确?如果是,则这三个部分如何共同创建二进制文件?
这个文件包含固定长度的Elf64_Dyn
或Elf32_Dyn
条目,其中一些条目(例如.d_tag == DT_NEEDED
或DT_RPATH
)可能会通过它们的偏移量引用来自.dynstr
的字符串。动态加载器以特定方式解释这些条目-对于DT_NEEDED
,表示“必须加载此其他库”,对于DT_RPATH
,表示“必须在这些以冒号分隔的路径中搜索”,等等。
.dynamic
包含一个标记指针数组,其中包含指向.dynsim
和.dynstr
的指针。你的陈述是正确的,但不是很详细。然而,快速的谷歌搜索可以找到所有的细节。 - Margaret Bloom