This question already has answers here:
Embedding resources in executable using GCC
(4个答案)
7年前关闭。
通过Windows API(请参阅http://msdn.microsoft.com/en-us/library/ms648008(v=VS.85).aspx)将二进制资源嵌入PE镜像(EXE,DLL)是很容易的。
Linux中是否有任何类似的标准API?
还是某种事实上的方法来嵌入资源?
目标是将一些静态二进制和/或文本数据嵌入可执行文件中,例如图片,HTML等。这样程序二进制分发就像制作一个文件一样简单? (假设所有库依赖性都可以)
更新:
按照bdk的建议,我尝试了Embedding binary blobs using gcc mingw中描述的解决方案,它对我有用。但是,有一些问题值得一提:我的项目(在Code::Blocks中)由许多C++文件组成,并将二进制数据添加到任何对应的目标文件中使它们无用,这破坏了构建-
用gcc -c blob.S -o blob.o编译
现在可以使用以下命令从C程序中访问Blob:
使用bin2c转换器通常可以很好地工作,但是如果blob很大,则incbin解决方案会更快,并且占用的内存更少(编译时间)
(4个答案)
7年前关闭。
通过Windows API(请参阅http://msdn.microsoft.com/en-us/library/ms648008(v=VS.85).aspx)将二进制资源嵌入PE镜像(EXE,DLL)是很容易的。
Linux中是否有任何类似的标准API?
还是某种事实上的方法来嵌入资源?
目标是将一些静态二进制和/或文本数据嵌入可执行文件中,例如图片,HTML等。这样程序二进制分发就像制作一个文件一样简单? (假设所有库依赖性都可以)
更新:
按照bdk的建议,我尝试了Embedding binary blobs using gcc mingw中描述的解决方案,它对我有用。但是,有一些问题值得一提:我的项目(在Code::Blocks中)由许多C++文件组成,并将二进制数据添加到任何对应的目标文件中使它们无用,这破坏了构建-
objdump -x
将显示大多数嵌入后符号消失了(我没有找到解决方法)。为了解决这个问题,我向项目中添加了一个空的虚拟.cpp文件,其唯一目的是提供一个可播放的目标文件,并为此文件编写了以下自定义生成步骤,从而很好地完成了此工作(示例使用Code::Blocks宏) ):$compiler $options $includes -c $file -o $object
ld -Ur -b binary -o $object <binary payload path>
最佳答案
使自己成为汇编器文件blob.S:
.global blob
.global blob_size
.section .rodata
blob:
.incbin "blob.bin"
1:
blob_size:
.int 1b - blob
用gcc -c blob.S -o blob.o编译
现在可以使用以下命令从C程序中访问Blob:
extern uint8_t blob[];
extern int blob_size;
使用bin2c转换器通常可以很好地工作,但是如果blob很大,则incbin解决方案会更快,并且占用的内存更少(编译时间)
关于c++ - 有没有将资源嵌入Linux可执行镜像的标准方法? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5479691/
10-17 00:25