已关闭,此问题需要更focused。目前不接受答复。
**想改善这个问题吗?**更新问题,使其仅通过editing this post关注一个问题。
昨天关门了。
Improve this question
我有一个场景,我不想为我的用户提供一个实用程序来创建一个压缩的自解压可执行文件(类似于UPX,但具有其他属性)。
目前这是通过压缩可执行文件,然后生成包含字节数组的c源代码来完成的,该字节数组包含可执行文件:
#include "exdata.c"
exdata.c:
const unsigned char compressedData[] = { 0x28,0xB5... }
const size_t uncompressedSize = 3697664;
问题是,我希望能够改变这个字节数组,而不重新编译程序,使我的用户能够使用实用程序,而不需要他们安装一个c编译器。
我可以使用一个“占位符”字节数组,在编译后的二进制文件中找到那个值,然后用真实的的数据替换它吗?或者我可以以某种方式将数据添加到一个自定义的“段”,并只是修改?
编辑:我发现了一个名为lief的Python库,它似乎能够修改段内容,但修改一个数据比现有数据更多的段似乎非常复杂,因为需要处理所有其他段和地址+偏移量
3条答案
按热度按时间o4hqfura1#
简单的愚蠢的方式来做这件事。
1.让可执行文件知道它的长度。简单的方法是使用
const
,然后构建、测量、再构建。这对自动化来说是一种痛苦。1.将压缩流连接到可执行文件。
1.在可执行源代码中,打开/proc/self/exe,查找到指定的字节并开始阅读。
我已经做到了这一点,正是这些步骤,并提供了一个小工具来做2.我把这个工具称为第四步。
jgwigjjp2#
@CraigEstey这是一个替代方案,但理想情况下,为了方便和编译时间,希望避免使用docker- Richard
好吧,所以没有容器。但是,许多商业安装程序使用
sh
脚本作为初始提取器。下面是我自己开发的一种格式:
oalqel3c3#
我认为GCC和Objcopy可以解决你的很多问题:
__attribute__
扩展将默认的压缩图像放在它自己的部分中