6

我想向 ELF 文件添加一些信息,但理想情况下,它需要以一种程序可以轻松读取此信息的方式完成,而无需了解 ELF 或使用普通标准语言库之外的工具。我正在考虑简单地将这些数据附加到 ELF 文件的末尾(使用某种标记来指示数据的开始,以便读取程序可以向后查找标记),但我想确保这不会首先违反 ELF 规范。我对特定加载器是否可以很好地处理此类附加数据不感兴趣;我想知道 ELF 规范本身是否有任何保证,以便我知道不同的 ELF 兼容加载器会对此感到满意。

我看到以前有人问过这样的问题,但要么假设这个附加是好的,要么没有直接的回应:

据我所知,ELF 规范在这里:

我无法通过几次搜索来确定我想要的属性是否被该规范明确允许。

4

2 回答 2

7

规范并没有真正说明它,所以有人可能会争辩说“有尾随数据是未定义的行为”。另一方面,ELF 规范对其期望相当清楚:“<em>节和段没有指定的顺序。只有 ELF 标头在文件中具有固定位置。”,这为以一种或另一种方式嵌入数据提供了足够的空间,使用一个部分,或者不使用一个 [这就是未引用的数据!]。

至少从 1980 年代末开始,这种“数据自由”就被利用了;考虑“自解压档案”,其中通用解包代码存根在尾随数据部分上放开。

事实上,即使在 RIFF 和 PNG 等不可执行的数据格式中,您也可以找到这样的隐含特征。当然,并非所有格式都允许这样做;特别是那些数据被定义为运行直到 EOF 而不是存储在某个标头中的固定长度的那些。(考虑 ZIP:附加数据是不可能的,但前置是可能的,这导致 EXE-ZIP 可以被未修改的)解压缩程序操作系统读取。)

像这样使用未引用的数据只有一个缺点:读取和保存文件时,您可能会丢失这些数据。

于 2012-04-11T13:36:21.487 回答
0

将额外数据添加到 ELF 文件中可能是可以的(因为您可以向 ELF 添加新段和新部分),但您应该拥有(或改进)工具来处理“改进的”ELF,这可能是一个重要的负担。并且不要忘记很好地记录(如果可能,在可自由访问的文档中)您正在做的事情。

于 2012-04-11T18:44:28.273 回答