C 将节添加到ELF文件

C 将节添加到ELF文件,c,linux,elf,C,Linux,Elf,我需要能够添加到ELF文件的任意部分。我不能在这个程序中使用GPL代码,所以BFD是不可能的。我可以使用libelf/gelf来阅读小节,但是这些小节的文档非常稀少,我也不知道如何添加小节。有人知道怎么做吗?我宁愿不写我自己的ELF代码。中有一些(可能)相关的答案。公认的答案提到使用objcopy将节添加到ELF文件,并声称拥有BSD许可的objcopy实现,可能适合您的需要。看看ELFsh,它现在是ERESI项目的一部分 他们有很多文档和工具的超酷用法。我自己还没有尝试过,但是你可以看看lib

我需要能够添加到ELF文件的任意部分。我不能在这个程序中使用GPL代码,所以BFD是不可能的。我可以使用libelf/gelf来阅读小节,但是这些小节的文档非常稀少,我也不知道如何添加小节。有人知道怎么做吗?我宁愿不写我自己的ELF代码。

中有一些(可能)相关的答案。公认的答案提到使用
objcopy
将节添加到ELF文件,并声称拥有BSD许可的
objcopy
实现,可能适合您的需要。

看看ELFsh,它现在是ERESI项目的一部分
他们有很多文档和工具的超酷用法。

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

以下链接可能很有用:

  • 教程“”中有一章介绍如何创建新的ELF对象
  • 手册页面详细描述了
    libelf
    的API

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

取自


您如何从程序中访问它?通过重新读取所有的exe?还有更好的办法。那是一个愚蠢的评论。问题不是如何在运行时访问任何内容。问题是,如何将节添加到ELF fil。或者我误解了你的评论。你的评论很傻,回答也很傻,如果他需要添加一个部分,我想他也想访问它。这只是应用逻辑。从程序中访问它,而不是使用objdump!我是在我的一个节目里做的。。。我这样问是因为如果需要的话,我可以发布这个方法。如果你阅读了这个问题,你必须承认这甚至不是一个如何访问它的问题。“将节添加到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