Results 1 to 3 of 3

Thread: Executable patch generation methods

  1. #1
    Administrator Shelwien's Avatar
    Join Date
    May 2008
    Location
    Kharkov, Ukraine
    Posts
    3,267
    Thanks
    200
    Thanked 985 Times in 511 Posts

    Executable patch generation methods

    I've done some comparison, but its still hard to get any conclusions -
    it doesn't seem like there's a best method for all cases.
    Some observations:
    - original dispack crashes so I had to use freearc instead :)
    - courgette crashes on bcj-processed files (and is lossy anyway)
    - courgette disasm doesn't help, but dispack actually does
    - courgette has a newer bsdiff engine, a little more efficient

    xbmc20672_vs_xbmc26071
    Code:
    4469016 - xbmc_26071_lzma
    3863435 - bsdiff
    2949529 - e8+dispack+courgette-gen+lzma
    2918507 - bsdiff_sh_dif
    2758942 - e8filt_v2+bsdiff_sh
    2733034 - e8filt_v4+bsdiff_sh
    2728477 - e8filt_v2j+bsdiff_sh
    2720824 - bcj+bsdiff_sh_dif
    2640251 - courgette-dis-gen+lzma
    2608299 - bcj2+bsdiff_sh_dif
    2566840 - dispack_dif
    2516250 - courgette-gen+lzma
    2497765 - dispack+courgette-gen+lzma
    powerarc1150_vs_powerarc1162
    Code:
    3610965 - pa_1162_lzma
    1756254 - e8+dispack+courgette-gen+lzma
    1541960 - courgette-dis-gen+lzma
    1239863 - dispack_dif
    1231582 - bsdiff
    1212591 - dispack+courgette-gen+lzma
    1075800 - courgette-gen+lzma
    1057060 - bcj2+bsdiff_sh_dif
    1050062 - bsdiff_sh_dif
    1031481 - e8filt_v2+bsdiff_sh
    1030719 - e8filt_v2j+bsdiff_sh
    1027606 - bcj+bsdiff_sh_dif
    1000865 - e8filt_v4+bsdiff_sh
    The kit used to collect these stats:
    http://nishi.dreamhosters.com/u/exediff_0.rar
    Maybe somebody would be able to find better lzma options
    or get more ideas to test.
    However, note that the priority is to improve the patch "quality",
    not just to get a smaller patch archive - its known that eg. ccm
    does better job than lzma here etc.

  2. #2
    Administrator Shelwien's Avatar
    Join Date
    May 2008
    Location
    Kharkov, Ukraine
    Posts
    3,267
    Thanks
    200
    Thanked 985 Times in 511 Posts
    Btw, here're some sources for "bsdiff_sh" mentioned above.

    http://nishi.dreamhosters.com/u/bsdiff_sh0.rar
    - sources from http://www.daemonology.net/bsdiff/bsdiff-4.3.tar.gz
    - bzip2 binding removed (its a bad idea to use BWT there)
    - 64-bit values reduced to 32-bit (nobody would be able to process 2G+ files with bsdiff anyway

    http://nishi.dreamhosters.com/u/bsdiff_sh1.rar
    - modified E8 filter included (near jumps/calls skipped)
    - variable-length coding ported from courgette

    http://nishi.dreamhosters.com/u/bsdiff_sh2.rar
    - runlength zero coding of delta bytes ported from courgette

    In my case "sh1" slightly improved patch compression (mostly E
    and "sh2" made it worse (LZ itself is good enough for runlength data),
    though uncompressed patches became smaller, but courgette shows
    even worse results there, so maybe it makes sense with some very
    similar target files.

  3. #3
    Programmer Bulat Ziganshin's Avatar
    Join Date
    Mar 2007
    Location
    Uzbekistan
    Posts
    4,498
    Thanks
    741
    Thanked 664 Times in 358 Posts
    dispack does e8 preprocessing by itself

Similar Threads

  1. zlib 1.2.4 LC2 patch
    By roytam1 in forum Data Compression
    Replies: 8
    Last Post: 5th December 2016, 08:35
  2. disasm-based executable's filter
    By Bulat Ziganshin in forum Data Compression
    Replies: 17
    Last Post: 22nd March 2010, 16:14
  3. Courgette - A new differential executable compressor
    By Arkanosis in forum Data Compression
    Replies: 1
    Last Post: 17th July 2009, 22:30
  4. parsing methods
    By Piotr Tarsa in forum Forum Archive
    Replies: 18
    Last Post: 9th August 2007, 06:45

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •