DaT*_*oop 11 c++ linux binary qt
是否有可能在Linux [ELF]二进制文件中替换嵌入式资源[例如样式,图像,文本]?
我注意到我可以更改文本,但如果我输入更多文本或删除文本,则会出现分段错误.我还没有通过ELF规范,但我想知道是否有可能.
我设法使用mediaextract 项目从二进制文件中提取图像,但我需要做相反的操作而不破坏二进制结构.
这个答案特定于 Qt 的资源系统(.qrc、rcc)。
来自文档:
目前,Qt 始终将数据直接存储在可执行文件中,即使在操作系统提供资源本机支持的 Windows、macOS 和 iOS 上也是如此。这可能会在未来的 Qt 版本中发生变化。
所以是的,Qt 资源包含在二进制文件中。
rcc
处理 .qrc 文件会生成一个 .cpp 文件,其中包含(主要)简单的字符数组,这些数组表示资源数据、资源名称和一些其他元数据。
编译此类 .cpp 文件会在二进制文件中创建字节字段。
您可以在二进制文件中更改此类资源,但只能以非常有限的方式进行。
对于初学者来说,如果二进制文件包含任何类型的自检查(例如对数据部分进行哈希处理并将其与某些预先计算的哈希值进行比较),您将无法以合理的方式更改数据。
如果您的数据与原始数据的字节长度不同,则不能简单地替换它,因为这会改变二进制文件的内部布局并使相对地址无效。
如果用较短的字符串替换,您可能会在末尾使用零填充。
默认情况下资源是压缩的(ZIP 格式)。可以关闭压缩。