QT 应用程序 - 替换嵌入式资源
QT Applications - Replacing embedded resources
是否可以替换Linux [ELF]二进制文件中的嵌入式资源[例如样式,图像,文本]?
我注意到我可以更改文本,但是如果我键入更多文本或删除文本,则分段错误就会开始出现。我还没有通过 ELF 规范,但我想知道这是否可能。
我设法使用媒体提取从二进制文件中提取图像项目,但我需要在不破坏二进制结构的情况下做相反的事情。
这个答案是针对Qt的资源系统(.qrc,rcc)的
。从文档中:
目前,Qt总是将数据直接存储在可执行文件中,即使在Windows,macOS和iOS上也是如此,操作系统为资源提供本机支持。这可能会在未来的Qt版本中发生变化。
所以是的,Qt资源包含在二进制文件中。
rcc
'处理.qrc文件会产生一个.cpp文件,其中包含(主要)简单的字符数组,这些数组表示资源数据,资源名称和一些其他元数据。
编译此类.cpp文件会在二进制文件中创建字节字段。
您可以在二进制文件中更改此类资源,但只能以非常有限的方式进行更改。
对于初学者来说,如果二进制文件包含任何类型的自检(例如散列数据部分并将其与一些预先计算的散列进行比较),您将无法以合理的方式更改数据。
如果数据与原始数据的字节长度不同,则不能简单地替换它,因为它会更改二进制文件的内部布局并使相对地址无效。
如果用较短的字符串替换,您可能会在末尾使用零填充。
默认情况下,资源会压缩(采用 ZIP 格式)。可以关闭压缩。
- 如果在编译期间打开了压缩(您似乎无法控制),则需要创建压缩到与原始数据相同的长度的新数据。
相关文章:
- 具有瞬态资源的RAII类
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 允许从 std::map 的密钥窃取资源?
- 参考资源文件VC++中的$(SolutionDir)
- 如何维护资源管理器项目视图中当前可见的项目列表
- 将 std::allocate_shared 与多态资源分配器一起使用
- 使用RAII在给定次数的迭代后重新分配资源
- 资源管理设计模式
- 如何跨平台将二进制资源构建到程序中?
- SetDlgItemInt 不会更改嵌入资源的编辑框
- Klocwork Inside的资源泄漏
- 从存储为 Windows 资源 (c++) 的 png 中获取 png 文件数据
- 使用嵌入式猫鼬服务器托管应用程序
- C++链接时间资源"allocation"而不定义
- 使用 Bazel 生成 QT 资源文件
- 编译器资源管理器和 GCC 具有不同的输出
- 为什么开发人员将C / C ++用于嵌入式系统,而不是像Python这样的高级语言与C相比?
- QT 应用程序 - 替换嵌入式资源
- 读取一个嵌入式文本文件资源Visual Studio c++
- 可以写入嵌入式资源文本文件吗?