ELF 可执行文件中 .dynamic .dynsym 和 .dynstr 之间的区别
Difference between .dynamic .dynsym and .dynstr in an ELF executable
我的初步了解是:
.dynamic
包含可执行文件需要加载的库
.dynsym
包含外部符号如setsockopt@GLIBC_2.0
.dynstr
包含函数需求的字符串
总的来说,我对这些部分如何协同工作来创建二进制文件感到有点困惑——特别是 .dynsym
和 .dynstr
。所以我的问题有两个方面。我的上述陈述是否正确?如果是这样,这三个部分如何协同工作以创建二进制文件?
Are my statements above correct?
.dynsym
部分包含一组 Elf32_Sym
或 Elf64_Sym
类型的固定长度记录。
由于这些是固定长度的条目,它们不能自己描述二进制导出或导入的任意长度的符号(字符串) .
因此这些条目不包含字符串。相反,它们包含一个 offset 到 .dynstr
(在 .st_name
字段中),并且在这个偏移处找到符号名称。
因此,“.dynsym
包含 setsockopt@GLIBC_2.0”和“.dynstr
包含函数要求的字符串”(无论最后一个语句是什么意思)都是不正确的。
.dynsym
包含 Elf32_Sym
或 Elf64_sym
描述导入符号 setsockopt
,并引用 "setsockopt"
字符串在 .dynstr
节。
同样,“.dynamic
包含可执行文件需要加载的库”是错误的——该部分不包含 任何 个库。
它包含 Elf64_Dyn
或 Elf32_Dyn
的固定长度条目,其中一些(例如带有 .d_tag == DT_NEEDED
或 DT_RPATH
的条目)可能引用 [=13] 中的字符串=] 通过他们的偏移量。动态加载程序以某种方式解释这些条目——DT_NEEDED
为 "must load this other library",DT_RPATH
为 "must search these colon-separated paths",等等
我的初步了解是:
.dynamic
包含可执行文件需要加载的库.dynsym
包含外部符号如setsockopt@GLIBC_2.0
.dynstr
包含函数需求的字符串
总的来说,我对这些部分如何协同工作来创建二进制文件感到有点困惑——特别是 .dynsym
和 .dynstr
。所以我的问题有两个方面。我的上述陈述是否正确?如果是这样,这三个部分如何协同工作以创建二进制文件?
Are my statements above correct?
.dynsym
部分包含一组 Elf32_Sym
或 Elf64_Sym
类型的固定长度记录。
由于这些是固定长度的条目,它们不能自己描述二进制导出或导入的任意长度的符号(字符串) .
因此这些条目不包含字符串。相反,它们包含一个 offset 到 .dynstr
(在 .st_name
字段中),并且在这个偏移处找到符号名称。
因此,“.dynsym
包含 setsockopt@GLIBC_2.0”和“.dynstr
包含函数要求的字符串”(无论最后一个语句是什么意思)都是不正确的。
.dynsym
包含 Elf32_Sym
或 Elf64_sym
描述导入符号 setsockopt
,并引用 "setsockopt"
字符串在 .dynstr
节。
同样,“.dynamic
包含可执行文件需要加载的库”是错误的——该部分不包含 任何 个库。
它包含 Elf64_Dyn
或 Elf32_Dyn
的固定长度条目,其中一些(例如带有 .d_tag == DT_NEEDED
或 DT_RPATH
的条目)可能引用 [=13] 中的字符串=] 通过他们的偏移量。动态加载程序以某种方式解释这些条目——DT_NEEDED
为 "must load this other library",DT_RPATH
为 "must search these colon-separated paths",等等