现在的位置: 首页 > 综合 > 正文

数据自解压简单原理

2013年02月01日 ⁄ 综合 ⁄ 共 1133字 ⁄ 字号 评论关闭
文章目录

数据自解压简单原理

JohnsonFeng

    自解压文件,就是能将自身的数据解压缩的压缩文件,实际上,这些文件是以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中而且是有很多个版本的。

抱歉!评论已关闭.