【问题标题】:Packing a file into an ELF executable将文件打包到 ELF 可执行文件中
【发布时间】:2011-02-23 11:06:21
【问题描述】:

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

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

有人知道我该如何实现吗?想在可执行文件中加一个section或者使用特殊标记(例如0xBADBEEFC0FFEE)来检测可执行文件中数据的开头,但不知道有没有更漂亮的方法。

提前致谢。

【问题讨论】:

    标签: binary embed file-format elf


    【解决方案1】:

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

    objcopy --add-section sname=file oldelf newelf
    

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

    【讨论】:

    • 我不知道 objcopy 可以做到这一点!谢谢。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-24
      • 2015-09-10
      • 1970-01-01
      • 2012-12-09
      • 1970-01-01
      • 1970-01-01
      • 2015-11-23
      • 2015-11-16
      相关资源
      最近更新 更多