当前位置: 首页 > 面试题库 >

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

夏锐藻
2023-03-14
问题内容

通过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>

问题答案:

使自己成为汇编器文件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解决方案会更快,并且使用更少的内存(编译时间)



 类似资料:
  • 我已经浏览了Stackoverflow一整天,寻找如何做到这一点,但我还没有成功 我正在将我制作的一个快速游戏打包成一个可执行的jar,但我没有正确地引用图像,我只是引用了文件 我的类在src default package中,我不确定应该在哪里添加映像,或者是否必须将映像添加到构建路径中,或者在最新版本的eclipse中将映像添加到构建路径中的正确方法

  • 问题内容: 我有一个多模块Maven项目,其中一个模块用于分发。 该发行版包含一个我想轻松执行的可执行jar。但是,要执行它,我必须键入类似以下内容: 简单键入以下内容将是更好的选择: 不幸的是,我找不到找到执行.jar的java目标的方法。exec目标实际上可以做到,但是有一个陷阱:jar包含一个嵌入式码头服务器,并且由于exec的工作方式(不使用与maven相同的JVM),除非我杀死进程,否则

  • 我可以把它作为一个图像到URL,但我不能作为一个文件。如何通过URL将此文件作为图像引用?

  • 我有一个maven项目,安装了m2eclipse。当我构建项目时,src/main/resources中的文件不会被复制到target/classes文件夹中。非常感谢您的帮助。

  • 问题内容: 我一直像这样处理JavaScript中的可选参数: 有更好的方法吗? 有没有在这种情况下使用会失败的情况? 问题答案: 如果传递了optionalArg,您的逻辑将失败,但评估为false-尝试使用此方法 或另一种习语: 使用任何一种最能传达您意图的习语!

  • 我试图构建一个资源包,从数据库而不是属性文件获取其消息。我做了一些扩展ResourceBundle的测试,ResourceBundle。控件和ListResourceBundle,我想我走的是正确的道路。 当我需要查询实际数据库以从我的ResourceBundle实现中获取消息时,我就到达了一个点。我想利用EJB层上的所有JPA架构体系来运行查询并实例化存储密钥、消息和区域设置的对象。因此,如果我