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

Linux 将任意数据附加到ELF文件是否违反ELF规范?,linux,gcc,build,linker,elf,Linux,Gcc,Build,Linker,Elf,我想向ELF文件中添加一些信息,但理想情况下需要这样做,即程序可以轻松读取这些信息,而无需了解ELF或使用普通标准语言库之外的工具。我想简单地将这些数据附加到ELF文件的末尾(使用某种类型的sentinel来指示数据的开始,这样读取程序就可以向后搜索sentinel),但我想首先确保这不会违反ELF规范。我对特定的加载器是否能很好地处理这些附加数据不感兴趣;我想知道ELF规范本身是否保证了任何东西,这样我就可以知道不同的ELF兼容加载程序会对它感到满意 我看到以前有人问过类似的问题,但假设这个附

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

我看到以前有人问过类似的问题,但假设这个附加是可以的,或者没有直接的回答:

据我所知,ELF规范如下:


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

该规范并没有真正提到它,因此有人可能会认为“有尾随数据是未定义的行为”。另一方面,ELF规范非常清楚其期望:“节和段没有指定的顺序。只有ELF头在文件中有固定的位置。”,这为以某种方式嵌入数据、使用节或不使用节提供了足够的空间[这就是未引用的数据!]

这种“数据自由”至少在20世纪80年代末就被利用了;考虑“自解压缩文件”,其中一个通用的解压缩代码存根在尾随数据部分松动。

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


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

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