如何扩展C程序中嵌入的文件资源

时间:2011-07-07 01:50:14

标签: c linux gcc embedded-resource expand

在GCC Linux上,有没有办法可以添加一个文件资源静态嵌入到C程序中,然后我如何将它从main()扩展到/ tmp?

3 个答案:

答案 0 :(得分:3)

您可以使用objcopy嵌入资源,然后使用普通文件操作在/ tmp中创建文件。

如果你编译这个程序:

#include <stdio.h>

extern char _binary_resource_bin_start, _binary_resource_bin_end;

int main() {
  FILE*out = fopen("/tmp/rsrc.bin","wb");
  fwrite(&_binary_resource_bin_start,
    &_binary_resource_bin_end - &_binary_resource_bin_start, 1, out);
  fclose(out);
}

使用这个makefile:

program: program.o resource.o
    $(CC) -o program program.o resource.o

resource.o: resource.bin
    objcopy -I binary -O elf32-i386 -B i386 resource.bin resource.o

resource.bin:
    echo resource-file-contents > resource.bin

我相信你会得到你想要的东西。

答案 1 :(得分:2)

只需将其存储为字符串(char *)即可。如果它有嵌入的空值,或者您不想使用引号,反斜杠等转义,uuencode-,hex-或base64-编码它,并将解码例程放入C程序或从外部调用它。只需使用常规文件操作将数据写入/ tmp文件。

答案 2 :(得分:0)

也许您正试图隐藏您的PHP代码。如果是这种情况,请记住,从生成的可执行文件中检索PHP代码是微不足道的,甚至不运行后者。如果隐藏/混淆是目标,那么您可能需要考虑使用PHP编码器。