打包工具实现原理
2014-05-05 15:45
399 查看
本文转载自JohnsonFeng的文章《数据自解压简单原理》,原文链接为/article/7026297.html
自解压文件,就是能将自身的数据解压缩的压缩文件,实际上,这些文件是以exe的形式出现的,这样它才能被执行。简单研究了一下基本步骤,实际并不复杂。 自解压文件的原理是把压缩数据存放到exe中,当需要解压时,直接执行exe文件,就能把文件解压到制定的位置。那么如何将数据放到exe中是一个首先需要解决的问题,需要解决的第二个问题是exe文件如何实现自解压。1.将数据集成到exe文件中
exe文件是PE文件(Portable Execute,包括exe,dll,ocx,sys,com等二进制可执行文件)的一种,如果需要详细知道一个exe文件如何构成,可以查询PE文档格式的相关手册,但本文涉及的问题无需深入研究。大多数C++程序员应该可以联想到将压缩数据作为资源放到exe中,其原理和在exe中放一张位图是一样的,但这有些不便之处,如果需要经常制作这类exe,将不得不安装开发环境,重新编译,而实际上需要做的只不过是修改一下资源。因此,用编译的方法生成最终的exe是不方便的(但完成解压缩部分的自解压程序需要用编译器编译一次)。这里可使用以下函数: UpdateResource 如何使用资源BOOL UpdateResource( HANDLE hUpdate, LPCTSTR lpType, LPCTSTR lpName, WORD wLanguage, LPVOID lpData, DWORD cbData);在使用它之前,自解压程序中需要先定义一个资源,这个资源可以是任意的,但需要确定好它的ID号,用此函数更新资源,可以把数据填进去。当然,除了上述的自解压程序外,还得制作一个生成自解压包的程序,它利用以上函数将压缩后的数据添加到目标文件。自解压程序+数据==添加数据到自解压程序中==>自解压文件
2.exe文件如何实现自解压
制作自解压程序的过程,和利用第三方压缩/解压缩库解压一般数据包是类似的,不同的是,压缩数据不再是独立的文件,而是包含在exe中。在解压时,需要调用exe自身的资源,读入内存,并使用相应的解压缩算法解开数据。WinZIP和WinRAR软件生成的自解压程序同样也有一个自解压程序,通常被称为sfx,都是很小的程序,带有解压缩功能。另外,如果自己使用zlib,可以到官方网站下载,使用起来很容易,一个compress和一个decompress函数,压缩解压全搞定!本文讨论的关键问题应该已经解决了,至于数据是否需要压缩、以及需要使用几个资源文件可依需求而定。自解压文件可用于安装程序发布,也可用于发布不同版本的程序,如果这些数据需要集成到exe中而且是有很多个版本的。相关文章推荐
- 美团多渠道打包工具walle及结合python实现界面化快速打包
- NSIS工具打包实例--实现多组件选择,基本参数配置功能
- strace工具的实现原理
- 日志传输工具-Flume实现原理及应用
- Android打包apk实现原理与流程(雷惊风)
- 不借助工具手动按原理实现图片转BASE64字符串编码
- Git Analyze 工具实现与原理
- 重签名工具re-sign.jar的实现原理
- NSIS打包工具实现:快捷方式附加到开始菜单、锁定到任务栏
- 基于XMPP协议的即时通讯工具的客户端实现原理
- Python:的web爬虫实现及原理(BeautifulSoup工具)
- 无需WScript权限,服务端无组件打包、解包文件及客户端解包文件的原理与实现
- 不用Eclipse工具实现apk程序编译及打包 aapt
- 一步一步跟我学习lucene(13)---lucene搜索之自定义排序的实现原理和编写自己的自定义排序工具
- word2vec模型原理与实现 word2vec是Google在2013年开源的一款将词表征为实数值向量的高效工具. gensim包提供了word2vec的python接口. word2vec采用
- 教你快速高效接入SDK——iOS多渠道自动打包工具核心原理
- 不用Eclipse工具实现apk程序编译及打包 aapt
- windows系统不用Eclipse工具实现Android apk程序编译及打包工具
- Windows虚拟地址转物理地址(原理+源码实现,附简单小工具)
- 【堆调试工具】pageheap的使用和原理分析&Linux下相似的功能实现