加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 访问附加到ELF二进制文件的数据

发布时间:2020-12-14 02:12:10 所属栏目:Linux 来源:网络整理
导读:我有一个静态ELF二进制文件,它从zip文件中读取数据.为了简化分发,我想将zipfile附加到二进制文件,如下所示: $cat mydata.zip mybinary 我知道这样做不会损害mybinary,但我不知道如何访问mydata.zip的内容.可能吗?如果是这样,怎么样? 在过去,我使用了附加
我有一个静态ELF二进制文件,它从zip文件中读取数据.为了简化分发,我想将zipfile附加到二进制文件,如下所示:

$cat mydata.zip >> mybinary

我知道这样做不会损害mybinary,但我不知道如何访问mydata.zip的内容.可能吗?如果是这样,怎么样?

在过去,我使用了附加数据然后附加数据长度的技巧,因此我所要做的就是打开二进制文件,读取流的最后一个int,回退那个长度然后开始解压缩,但是由于各种原因在这里不起作用(例如,我不能保证当需要zipfile时文件仍然在光盘上).

如果解决方案适用于OS X和MinGW,那么全面超级双倍加分.

解决方法

假设在应用程序执行开始时您可以访问该文件,然后打开它的句柄应该可以防止操作系统在磁盘上删除该文件,直到文件的最后一个引用被关闭为止.这将允许您无需担心地使用该文件句柄来查找文件中的内容.

创建一个全局变量:

int app_fd;

大多数这些过程都是相同的,在主程序中,只需发出:

app_fd = open(argv[0],O_RDONLY);

在执行开始时.当谈到执行中需要访问zip文件的那一点时,只需使用文件描述符,而不是文件名.

在运行时,如果您没有对应用程序的原始内容的某种形式的句柄,那么您可能无法访问zip文件的内容.这是因为加载器仅映射到预期的文件部分.二进制文件末尾的内容将被视为垃圾而未映射.

要完成将zip文件映射到内存中,您需要遵循不同的方法.您需要将.zip嵌入到二进制文件的ELF(linux)/ COFF(Windows)/ Mach-O(Mac OS X)部分中,该部分具有设置的属性,以确保它映射到应用程序中(这需要应用程序中的大量前期工作,以及处理中的更多后期工作).这不是微不足道的,可能涉及相当多的编码,以使每个平台正确.

顺便说一句,在该应用程序运行时从Windows系统中删除应用程序并不是一件容易的事情(我认为如果它驻留在NTFS上,你可以移动它).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读