【发布时间】:2013-10-23 01:22:21
【问题描述】:
在我们通过 GCC 链接器生成的 ELF 文件中,ELF 文件的顶部始终是可执行代码的版本标识符。
这是通过创建 version.c 文件并将生成的目标文件作为链接命令中的第一个可链接对象来实现的。
但是对于一个可执行文件,这无法正常工作,我们可以发现的唯一区别是可执行文件包含 C 和 C++ 代码的混合,并且版本符号正在重新定位到其他地方。
因此,问题是有没有办法通过链接器命令或代码属性指令来保证 ELF 文件中符号的绝对位置,从而使符号始终位于文件的顶部?
【问题讨论】:
-
在
e_ident[EI_ABIVERSION] and e_type之间使用 7 个未使用的字节怎么样? :) -
我想你正在使用 GNU 链接器?如果是这样,它带有可以根据您的口味进行调整的脚本。我不认为您可以更改脚本以在特定位置强制使用符号,但是,您可以创建一个特殊的 .appversion 部分并确保这个新部分首先出现。现在不要问我如何做到这一切......我只知道你能做到。
-
链接器脚本似乎是一种选择,尽管正如您所说,尚不清楚如何使用它们将符号放在 ELF 文件的顶部。谜团在于为什么会发生这种情况。以前链接顺序决定符号位置。包含 C++ 库似乎影响了这一点。不知道C++目标代码在ELF排序方面是否有特殊要求