用于附加字符串元数据的自定义 ELF 部分

PSk*_*cik 7 linux gcc elf

我希望能够将一些字符串、易于提取的键值对与我的 ELF 可执行文件关联起来。

我注意到 gcc 编译的 ELF 有一个.comment部分

$ readelf -p .comment a.out 
Run Code Online (Sandbox Code Playgroud)

所以我尝试复制这一点:

主要.c:

#include <stdio.h>
int main(){ puts("Hello world"); return 0; }
const char str[] __attribute__((section(".meta"))) = "hello meta world";
Run Code Online (Sandbox Code Playgroud)

测试:

$ readelf -p .meta a.out 
String dump of section '.meta':
  [     0]  hello meta world
Run Code Online (Sandbox Code Playgroud)

或者

 $ readelf -p .meta a.out | sed -n 's/^[^]]*]  //p'
   hello meta world
Run Code Online (Sandbox Code Playgroud)

这有效。

是否有更好的方法将此类字符串键值对附加到 ELF 文件(而不将其分解为多个文件)?用户部分是否有一个命名空间(例如.user.meta)可以防止我破坏某些东西?

PSk*_*cik 3

根据规范,所有带点前缀的节名称都是保留的,并且没有点前缀的用户节可以安全使用:

带点 (.) 前缀的节名称是为系统保留的,尽管应用程序可以使用这些节(如果它们的现有含义令人满意)。应用程序可以使用不带前缀的名称,以避免与系统部分发生冲突。目标文件格式允许定义不在上面列表中的部分。一个目标文件可能有多个同名的部分。