zoukankan      html  css  js  c++  java
  • 数据自解压简单原理

    数据自解压简单原理

    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中而且是有很多个版本的。

  • 相关阅读:
    sublime text3快捷键
    SublimeText3追踪函数工具CTags设置及使用
    mysql的表锁
    ESXI vSphere如何设置虚拟机开机自启动
    gitee支持的开源许可证
    keepalive安装部署踩坑参考
    《牧神记》中诗词大全,有的可能是作者瞎编的
    定位Linux服务器SSH敲命令响应慢的问题
    Crypto-JS——Uncaught Error: Malformed UTF-8 data
    VUE——vue中组件之间的通信方式有哪些
  • 原文地址:https://www.cnblogs.com/Tue/p/1430500.html
Copyright © 2011-2022 走看看