我需要能够将任意部分添加到ELF文件中。我不能在这个程序中使用GPL代码,所以BFD是不可能的。我可以使用libelf / gelf来阅读部分,但文档相当稀疏,我无法弄清楚如何添加一个部分。有人知道怎么做这个吗?我宁愿不写我自己的ELF代码。
答案 0 :(得分:17)
this question about ELF file headers中有一些(可能)相关的答案。接受的答案提到使用objcopy
将部分添加到ELF文件,BSD bintools声称拥有可能符合您需求的BSD许可的objcopy
实现。
答案 1 :(得分:16)
我知道这是一个老问题,但我找到了一个帮助我将它应用到我的项目的工作示例。 (万一有人偶然发现这个问题)
$ 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
答案 2 :(得分:3)
以下链接可能很有用:
libelf
API的手册页。答案 3 :(得分:2)
看看ELFsh,它现在是ERESI项目的一部分 http://www.eresi-project.org/ 他们有很多文档和很酷的工具使用。
答案 4 :(得分:1)
我自己还没试过,但是你可以看一下libelf中的函数elf_newscn