一尘不染

有没有将资源嵌入Linux可执行映像的标准方法?[重复]

linux

通过Windows API将二进制资源嵌入PE映像(EXE,DLL)是非常容易的(请参阅http://msdn.microsoft.com/zh-
cn/library/ms648008(v=VS.85).aspx)。

Linux中是否有任何类似的标准API?

还是某种实际的资源嵌入方法?

目的是将一些静态的二进制和/或文本数据嵌入可执行文件中,例如图片,HTML等。这样程序二进制的分发就像复制一个文件一样简单?( 假设所有库依赖关系都可以

更新:

按照 bdk 的建议,我尝试了使用gccmingw嵌入二进制blob中描述的解决方案, 它对有用
。但是,有一些问题值得一提:我的项目(在Code::Blocks中)由许多C++文件组成,并且将二进制数据添加到任何相应的目标文件中使它们无用地破坏了构建-objdump-x将会表明大多数嵌入后符号消失了(我没有找到解决方法)。为了解决这个问题,我向项目中添加了一个空的虚拟.cpp文件,其唯一目的是提供一个可播放的目标文件,并为此文件编写了以下自定义生成步骤,从而很好地完成了此工作(示例使用Code
:: Blocks宏) ):

$compiler $options $includes -c $file -o $object
ld -Ur -b binary -o $object <binary payload path>

阅读 424

收藏
2020-06-02

共1个答案

一尘不染

使自己成为汇编器文件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编译blob现在可以使用以下命令从C程序中访问:

extern uint8_t blob[];
extern int blob_size;

使用bin2c转换器通常可以很好地工作,但是如果blob很大,则incbin解决方案会更快,并且使用更少的内存(编译时间)

2020-06-02