我需要能够向ELF文件添加任意节(section)。但是由于此程序中不能使用GPL代码,因此BFD不可行。我可以使用libelf/gelf来读取节,但这些文档相当匮乏,而且我无法弄清如何添加一个节。有人知道怎么做吗?我不想编写自己的ELF代码。
我知道这是一个老问题,但我找到了一个可行的示例,帮助我将其应用到我的项目中。(以防有人偶然遇到这个问题)
$ 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
在关于 ELF 文件头的这个问题中,有一些(可能)相关的答案。其中被接受的答案提到可以使用objcopy
向 ELF 文件添加节(sections),而BSD bintools声称拥有一个 BSD 许可证的实现objcopy
,可能适合您的需要。