2012-04-11 71 views
6

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

我看到这样的问题已经被问过,但无论哪种假设这追加是好的,也没有直接回应:

至于我可以告诉,ELF规范在这里:

我无法确定与几个搜索是否我想要的属性明确允许由该规范。

回答

7

该规范并没有真正地说出任何关于它的内容,所以人们可能会争辩说“这是未定义的行为,有后续的数据”。另一方面,ELF规范对其预期相当明确:“部分和分段没有指定顺序。只有ELF头文件中有一个固定的位置。“,它提供了足够的空间来以某种方式嵌入数据,使用一个部分,或者没有一个[这是未引用的数据!]。

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

事实上,即使在不可执行的数据格式(如RIFF和PNG)中,也可以找到这种隐式功能。当然,并非所有格式都允许这样做。尤其是那些数据被定义为运行到EOF而不是存储在某个头部的固定长度的数据。 (考虑ZIP:附加数据是不可能的,但前面加上是,这是什么导致了EXE-呼啸而过的(未修改)是可读解压缩程序操作系统。)

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

0

将额外的数据添加到ELF文件中可能没问题(因为您可以向ELF添加新的段和新的段),但是您应该有(或改进)工具来处理“改进”的ELF,而且可能是一个重要的负担。并且不要忘记记录得很好(如果可能,请在免费阅读的文档中)记录你正在做的事情。