QT应用程序 - 替换嵌入式资源
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT应用程序 - 替换嵌入式资源相关的知识,希望对你有一定的参考价值。
是否有可能取代嵌入式资源[例如Linux [ELF]二进制文件中的样式,图像,文本]?
我注意到我可以更改文本,但如果我输入更多文本或删除文本,则会出现分段错误。我还没有通过ELF规范,但我想知道是否有可能。
我设法使用mediaextract项目从二进制文件中提取图像,但我需要做相反的事情而不破坏二进制结构。
答案
这个答案特定于Qt的资源系统(.qrc,rcc)。
目前,Qt始终将数据直接存储在可执行文件中,即使在Windows,macOS和ios上,操作系统也在其中提供对资源的本机支持。这可能会在未来的Qt版本中发生变化。
所以是的,Qt资源包含在二进制文件中。
rcc
'ing a .qrc文件生成一个.cpp文件,其中包含(主要)简单的char数组,表示资源数据,资源名称和一些其他元数据。
编译这样的.cpp文件会在二进制文件中创建字节字段。
您可以在二进制文件中更改此类资源,但只能以非常有限的方式。
- 对于初学者,如果二进制包含任何类型的自检(如散列数据部分并将其与一些预先计算的散列进行比较),您将无法以合理的方式更改数据。
- 如果您的数据与原始数据的字节长度不同,则不能简单地替换它,因为它会改变二进制文件的内部布局并使相对地址无效。
- 如果用较短的字符串替换,最后可能会使用零填充。
默认情况下会压缩资源(采用ZIP格式)。可以关闭压缩。
- 如果在编译期间打开了压缩(您似乎无法控制),则需要创建压缩到与原始压缩长度相同的新数据。
以上是关于QT应用程序 - 替换嵌入式资源的主要内容,如果未能解决你的问题,请参考以下文章
结合两个代码片段?将用户输入的 Youtube url 转换为嵌入 url,然后将 iframe src 替换为转换后的 url