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

时间:2016-03-03 12:22:28

标签: c++ linux qt binary

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

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

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

1 个答案:

答案 0 :(得分:0)

此答案特定于Qt的资源系统(.qrc,rcc)。

来自the docs:

  

当前,Qt始终将数据直接存储在可执行文件中,即使在Windows,macOS和iOS上,操作系统也为资源提供本机支持。这可能会在将来的Qt版本中更改。

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

ban 1ban 生成一个.qrc文件会生成一个.cpp文件,该文件包含(主要是)简单的char数组,这些char数组表示资源数据,资源名称和其他一些元数据。

编译这样的.cpp文件会在二进制文件中创建字节字段。

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

  • 对于初学者,如果二进制文件包含任何类型的自检(例如,对数据节进行哈希处理并将其与某些预先计算的哈希进行比较),则将无法以合理的方式更改数据。

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

  • 如果替换为较短的字符串,则可能会在结尾处加零填充。

  

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

  • 如果在编译过程中打开了压缩功能(看起来似乎无法控制),则需要创建新数据,压缩后的数据长度与原始数据相同。