Binary 有人能推荐二进制压缩算法吗?

Binary 有人能推荐二进制压缩算法吗?,binary,compression,portable-executable,Binary,Compression,Portable Executable,我正在制作一个打包器(运行时压缩)来研究Windows PE格式的文件。我知道一些数据压缩算法,如RLE、LZW、Huffman endoing等,但哪种算法最适合压缩二进制数据。就像.exe文件一样?有人能建议哪种方法最适合压缩二进制数据吗?对于初学者,你应该从一个提供相当好的压缩比和一个小的解压缩存根开始(显然,对于打包机来说,有一个小的解压缩存根是必须的) LZ7x算法之后的算法(通常)比LZ7x算法提供更好的压缩 如果您以前从未编写过打包程序,我建议您主要使用PIC()风格的低级语言(实

我正在制作一个打包器(运行时压缩)来研究Windows PE格式的文件。我知道一些数据压缩算法,如RLE、LZW、Huffman endoing等,但哪种算法最适合压缩二进制数据。就像.exe文件一样?有人能建议哪种方法最适合压缩二进制数据吗?

对于初学者,你应该从一个提供相当好的压缩比和一个小的解压缩存根开始(显然,对于打包机来说,有一个小的解压缩存根是必须的)

LZ7x算法之后的算法(通常)比LZ7x算法提供更好的压缩

如果您以前从未编写过打包程序,我建议您主要使用PIC()风格的低级语言(实际上是C语言)编写解压存根,必要时使用汇编语言编写一些小部分。这样做的好处是,编译器可以为您完成大部分矛盾的工作(至少第1点和第2点):

  • 解压缩存根代码长度必须最小
  • 解压存根代码的速度必须是最佳的
  • 压缩和解压缩的内存使用必须保持在合理的限度内
  • 然后,您可以调整输出程序集以方便在上述各点之间进行良好的权衡


    一旦您对压缩理论有了很好的理解,您就应该明确地寻求实现一个派生的压缩器

    遵循PAQ的领先优势有多种:

    • 众所周知,它是多个领域(文本、图像)中最好的压缩器 和可执行文件,尽管每次使用不同的建模上下文)。见各种基准和标准

    • 它是开源的(并且遵循GPL许可证)

    首先,请特别尝试遵循PAQ8PX变体。不过,在生成的压缩PE文件中注入最小(长度)和快速的解压缩存根将是工作中最困难的部分

    PAQ算法也被farbrausch demoscene集团用于著名的PE压缩机。对其内部的一个相当好的一瞥是


    最后一句话,如果您不习惯数据压缩理论,我建议您先阅读Matt Mahoney(PAQ的作者)的非常好的介绍,以及关于数据压缩理论的wiki书籍

    请记住,压缩始终是一种权衡:最佳压缩比并不总是最终用户想要的。如果您需要256 GB内存或等待5分钟,或有10 MB字节的解压缩存根进行解压缩,这显然不是正确的路径