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

我想向ELF文件添加一些信息,但理想情况下需要这样做:程序可以在不理解ELF或使用正常标准语言库之外的工具的情况下轻松读取此信息。 我正在考虑简单地将这些数据附加到ELF文件的末尾(用某种标记来指示数据的开始,这样读取程序就可以向后find标记),但是我想确保这样做,首先违反ELF规范。 我对一个特定的加载器是否可以正确地处理这样的附加数据不感兴趣; 我想知道,如果ELF规范本身保证任何东西,以便我可以知道不同的符合ELF标准的装载机将会感到满意。

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

  • 访问附加到ELF二进制文件的数据
  • 将源代码添加到elf文件

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

  • http://www.muppetlabs.com/~breadbox/software/ELF.txt

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

这个规范并没有提到任何有关它的事情,所以人们可以争辩说:“这是未定义的行为,有后续的数据”。 另一方面,ELF规范对它的期望是相当清楚的:“ 分段和分段没有特定的顺序。 只有ELF头文件中有一个固定的位置。 “,这给了足够的空间来以某种方式嵌入数据,使用一个部分,或者没有一个[这是未被引用的数据!]。

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

实际上,即使在不可执行的数据格式(如RIFF和PNG)中,也可以找到这样的隐式功能。 并非所有格式都允许这样做; 特别是数据被定义为运行到EOF的数据,而不是存储在某个头部的固定长度。 (考虑ZIP:附加数据是不可能的,但是预先考虑的是,这是导致EXE-ZIP被两个 (未修改的)解压缩程序操作系统可读的原因。

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

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