在GCC Linux上,有没有办法可以添加一个文件资源静态嵌入到C程序中,然后我如何将它从main()扩展到/ tmp?
答案 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编码器。