Binary 将文件打包到ELF可执行文件中

Binary 将文件打包到ELF可执行文件中,binary,embed,file-format,elf,Binary,Embed,File Format,Elf,我目前正在寻找一种向已编译的ELF可执行文件添加数据的方法,即在不重新编译的情况下将文件嵌入到可执行文件中 我可以通过使用cat myexe mydata>myexe_with_mydata轻松做到这一点,但我无法从可执行文件访问数据,因为我不知道原始可执行文件的大小 有人知道我该如何实现这一点吗?我曾想过在可执行文件中添加一个部分,或者使用一个特殊的标记(0xBADBEEFC0FFEE)来检测可执行文件中数据的开头,但我不知道是否有更好的方法 提前感谢。您可以使用objcopy(1)将该文件作

我目前正在寻找一种向已编译的ELF可执行文件添加数据的方法,即在不重新编译的情况下将文件嵌入到可执行文件中

我可以通过使用
cat myexe mydata>myexe_with_mydata
轻松做到这一点,但我无法从可执行文件访问数据,因为我不知道原始可执行文件的大小

有人知道我该如何实现这一点吗?我曾想过在可执行文件中添加一个部分,或者使用一个特殊的标记(
0xBADBEEFC0FFEE
)来检测可执行文件中数据的开头,但我不知道是否有更好的方法


提前感谢。

您可以使用objcopy(1)将该文件作为特殊部分添加到elf文件中:

objcopy --addsection sname=file oldelf newelf
将文件添加到oldelf并将结果写入newelf(oldelf不会被修改)
然后,您可以使用libbfd读取elf文件并按名称提取节,或者只需滚动您自己的代码即可读取节表并找到节。请确保使用的节名不会与系统期望的任何内容冲突——只要您的名称不以
开头,就可以了。

我创建了一个名为的小型库,它提供了一个简单的接口,用于提取/引用使用
objcopy
嵌入的节。这允许您将偏移量/大小传递给另一个工具,或使用文件描述符从运行时直接引用它。希望这将有助于未来的人


值得一提的是,这种方法比编译成符号更有效,因为它允许外部工具引用数据而无需提取,而且它也不需要将整个二进制文件加载到内存中才能提取/引用它。

我不知道objcopy可以做到这一点!谢谢