2010-05-24 122 views
7

我目前正在寻找一种将数据添加到已编译的ELF可执行文件的方式,即将文件嵌入到可执行文件中而无需重新编译它。将文件打包成ELF可执行文件

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

有没有人有我如何能实现这个想法?我想为可执行文件添加一段或使用特殊标记(例如,0xBADBEEFC0FFEE)来检测可执行文件中数据的开头,但我不知道是否有更美观的方法来执行此操作。

在此先感谢。

回答

5

您可以将文件作为objcopy把(1)一个特殊的部分添加到ELF文件:

objcopy --addsection sname=file oldelf newelf 

将添加文件oldelf并将结果写入到newelf(oldelf不会修改) 然后,您可以使用libbfd来读取elf文件并按名称提取该部分,或者只是滚动自己的代码来读取部分表并找到部分。确保使用不与系统期望的任何内容相冲突的部分名称 - 只要您的名字不是以.开头,那么您应该没问题。

+0

我不知道objcopy可以做到这一点!谢谢。 – 2010-06-03 22:55:13

1

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

值得一提的是,这种方法比编译符号更有效,因为它允许外部工具引用数据而不需要提取数据,也不需要整个二进制文件按顺序装入内存提取/参考它。

相关问题