QT 应用程序 - 替换嵌入式资源

QT Applications - Replacing embedded resources

本文关键字:嵌入式 资源 替换 应用程序 QT      更新时间:2023-10-16

是否可以替换Linux [ELF]二进制文件中的嵌入式资源[例如样式,图像,文本]?

我注意到我可以更改文本,但是如果我键入更多文本或删除文本,则分段错误就会开始出现。我还没有通过 ELF 规范,但我想知道这是否可能。

我设法使用媒体提取从二进制文件中提取图像项目,但我需要在不破坏二进制结构的情况下做相反的事情。

这个答案是针对Qt的资源系统(.qrc,rcc)的

从文档中:

目前,Qt总是将数据直接存储在可执行文件中,即使在Windows,macOS和iOS上也是如此,操作系统为资源提供本机支持。这可能会在未来的Qt版本中发生变化。

所以是的,Qt资源包含在二进制文件中。

rcc'处理.qrc文件会产生一个.cpp文件,其中包含(主要)简单的字符数组,这些数组表示资源数据,资源名称和一些其他元数据。

编译此类.cpp文件会在二进制文件中创建字节字段。

您可以在二进制文件中更改此类资源,但只能以非常有限的方式进行更改。

  • 对于初学者来说,如果二进制文件包含任何类型的自检(例如散列数据部分并将其与一些预先计算的散列进行比较),您将无法以合理的方式更改数据。

  • 如果数据与原始数据的字节长度不同,则不能简单地替换它,因为它会更改二进制文件的内部布局并使相对地址无效。

  • 如果用较短的字符串替换,您可能会在末尾使用零填充。

默认情况下,资源会压缩(采用 ZIP 格式)。可以关闭压缩。

  • 如果在编译期间打开了压缩(您似乎无法控制),则需要创建压缩到与原始数据相同的长度的新数据。