将任意数据附加到ELF文件是否违反了ELF规范?

6
我想向一个ELF文件添加一些信息,但最好以一种程序可以轻松读取此信息而不需要理解ELF或使用标准语言库之外的工具的方式进行。我考虑的是将这些数据简单地附加到ELF文件的末尾(带有某种标记来指示数据的开始,以便读取程序可以向后查找到标记),但我想先确保这不违反ELF规范。我不关心特定的加载器是否能正常处理这种追加的数据;我想知道ELF规范本身是否保证了任何东西,以便我可以知道不同的符合ELF的加载器将对其满意。我看到过类似这样的问题,但要么假设这种追加是可以的,要么没有直接的回应: 据我所知,ELF规范在这里: 我无法确定通过几次搜索是否可以明确地允许我想要的属性。
2个回答

7
规范并没有对此做出明确的说明,因此可以认为“在数据后面添加未定义的数据是未定义行为”。另一方面,ELF规范对其期望非常清晰:“节和段没有指定的顺序。只有ELF头在文件中有一个固定的位置。”,这给了足够的空间来嵌入数据,使用一个部分,或者不使用一个部分(这就是未引用的数据!)。
自1980年代末以来,“数据自由”已经被利用;考虑“自解压缩档案”,其中通用的解压缩代码存根被释放到尾随数据部分。
事实上,即使在非可执行数据格式(如RIFF和PNG)中,您也可以找到这样的隐含特性。当然,并非所有格式都允许这样做;特别是那些数据定义为运行直到EOF而不是存储在某个标头中的固定长度的格式。 (考虑ZIP:附加数据是不可能的,但是前置是可能的,这就是导致EXE-ZIP可被未修改的解压程序和操作系统读取的原因。)
只有一个缺点使用未引用的数据:读取和保存文件时,您可能会丢失这些数据。

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接