如何在Linux上使用大型二进制char []数组创建目标文件?

时间:2011-07-30 17:47:00

标签: linux arrays binary elf

我需要的工具相当于:

$ echo 'char bar[] = {65, 66, 67};' >foo.c
$ gcc -c foo.c

我有一个多兆字节的二进制文件要放到bar数组中,我需要它而不创建.c文件:我希望创建.o文件直接来自二进制文件。另一种选择可以是创建.s.S文件,但我也想避免这种情况。是否有 binutils 等工具可以完成这项工作?

9 MB二进制文件的更新:gcc段错误。 as有效,但速度很慢,而临时.s文件太大。

2 个答案:

答案 0 :(得分:1)

您可以使用objcopy --add-section创建包含文件内容的部分。我认为您需要使用链接描述文件添加指向新部分开头的符号。

答案 1 :(得分:0)

很长一段时间,最简单的解决方案是创建.s.S文件。

binutils 不包含任何有用的内容。

有一个快速的两步技巧,使用很少的内存:

步骤1.创建并编译包含正确大小符号的.c文件,但它具有短签名而不是真实的长数据。它应该看起来像:

const char hi[1234567] = "SIGNATURE";
const char *hi_end = hi + sizeof(hi) / sizeof(char);

步骤2.找到编译器生成的.o文件中的字节SIGNATURE,并将其(以及以下'\0' s)替换为真实二进制数据文件中的数据。

Perl脚本cobjgen自动执行这两个步骤。有关更详细的分析和使用说明,请参阅此blog post