LSB 5 禁止同时拥有 SHT_DYNSYM 和 SHT_SYMTAB 部分?

问题描述 投票:0回答:1

我正在阅读 System V ABI 和 Linux Standard Base 规范中的 ELF 文件。关于符号表部分 System V 说

目前,一个目标文件每种类型只能有一个部分,但这一限制将来可能会放宽。 通常,SHT_SYMTAB 提供用于链接编辑的符号,尽管它也可用于动态链接。作为一个完整的符号表,它可能包含许多动态链接不必要的符号。 因此,目标文件还可能包含 SHT_DYNSYM 部分, 它保存动态链接符号的最小集合,以节省空间。

虽然LSB似乎明确禁止它

当前,目标文件可以具有 SHT_SYMTAB 类型的部分或 SHT_DYNSYM 类型的部分,但不能同时具有两者。 此限制将来可能会放宽。 通常,SHT_SYMTAB 提供用于链接编辑的符号,尽管它也可用于动态链接。作为一个完整的符号表,它可能包含许多动态链接不需要的符号。

因此,我用粗体标记的部分直接相互矛盾。同时,我斜体部分是逐字复制的,这让我怀疑 LSB 在从 System V 复制时可能犯了错误(即粗体部分)?

因此我的问题是,哪一个是正确的? Linux下一个目标文件可以同时有两个部分吗?

elf sysv linux-standard-base
1个回答
0
投票

您引用的文本似乎来自此处

它似乎也是完全伪造的:ELF(共享)对象同时具有 SHT_SYMTAB

SHT_DYNSYM 部分是非常常见的。示例:
echo "int foo() { return 42; }" | gcc -xc - -fPIC -shared -o foo.so
readelf -WS foo.so | egrep 'SYMTAB|DYNSYM'

  [ 3] .dynsym           DYNSYM          0000000000000288 000288 000090 18   A  4   1  8
  [21] .symtab           SYMTAB          0000000000000000 003028 000258 18     22  20  8

© www.soinside.com 2019 - 2024. All rights reserved.