向ELF文件添加节(section)

23

我需要能够向ELF文件添加任意节(section)。但是由于此程序中不能使用GPL代码,因此BFD不可行。我可以使用libelf/gelf来读取节,但这些文档相当匮乏,而且我无法弄清如何添加一个节。有人知道怎么做吗?我不想编写自己的ELF代码。

5个回答

25

我知道这是一个老问题,但我找到了一个可行的示例,帮助我将其应用到我的项目中。(以防有人偶然遇到这个问题)

摘自Sourceware邮件档案

$ echo 'int main() { puts ("Hello world"); }' | gcc -x c - -c -o hello.o

$ echo "this is my special data" >mydata

$ objcopy --add-section .mydata=mydata \
          --set-section-flags .mydata=noload,readonly hello.o hello2.o

$ gcc hello2.o -o hello

$ ./hello
Hello world

$ objdump -sj .mydata hello

20

在关于 ELF 文件头的这个问题中,有一些(可能)相关的答案。其中被接受的答案提到可以使用objcopy向 ELF 文件添加节(sections),而BSD bintools声称拥有一个 BSD 许可证的实现objcopy,可能适合您的需要。


3

2

1
我自己还没有尝试过,但你可以看一下libelf中的elf_newscn函数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接