我希望能够将一些具有线索,易于提取的键值对与我的ELF可执行文件相关联。
我注意到gcc编译的ELF有一个.comment
部分
$ readelf -p .comment a.out
所以我试图复制它:
main.c中:
#include <stdio.h>
int main(){ puts("Hello world"); return 0; }
const char str[] __attribute__((section(".meta"))) = "hello meta world";
测试:
$ readelf -p .meta a.out
String dump of section '.meta':
[ 0] hello meta world
或
$ readelf -p .meta a.out | sed -n 's/^[^]]*] //p'
hello meta world
这很有效。
是否有更好的方法将这些字符串键值对附加到ELF文件(不将其分解为多个文件)?用户部分是否有命名空间(例如.user.meta
)会阻止我破坏某些内容?
答案 0 :(得分:1)
根据spec,所有带点前缀的部分名称都是保留的,没有点前缀的用户部分可以安全使用:
带有点(。)前缀的节名称是为系统保留的, 虽然应用可能会使用这些部分,如果它们存在 意思是令人满意的。应用程序可能使用没有的名称 前缀以避免与系统部分冲突。目标文件格式 让我们定义一个不在上面列表中的部分。目标文件可以 有多个具有相同名称的部分。
答案 1 :(得分:0)
此外,Linux内核经常使用此技巧(通常通过内联汇编和.pushsection
指令)来存储频繁访问或重要的数据结构(通常为结构数组)。它具有非标准的ELF部分,例如__ex_table和__fixup。