Page 2 of 8

Posted: Mon Feb 20, 2006 4:17 pm
by diamond
Готова версия 1.0 для Windows, для Kolibri-версии немного подождите...
Основная модификация - добавлен алгоритм LZMA. Для справки: это основной алгоритм, используемый в архивах 7z.
Теперь пакует все лучше mxp*, в том числе free3d04 (для которого, кстати, нужен ключ /0) и docpak.
http://shade.msu.ru/~msu-se/mtappack.exe
http://shade.msu.ru/~msu-se/mtappack_src.rar

Posted: Mon Feb 20, 2006 4:53 pm
by mike.dld
А как насчёт скорости распаковки? Ведь программы такого рода должны нен только хорошо запаковывать, но и быстро распаковывать.

Posted: Mon Feb 20, 2006 6:02 pm
by diamond
aPLib и LZMA (как и все LZ-based алгоритмы) характеризуются очень быстрой распаковкой.

Posted: Wed Feb 22, 2006 8:57 am
by diamond
Скачайте заново со ссылок выше Windows-версию - там есть пара небольших изменений.
Kolibri-версия:
http://shade.msu.ru/~msu-se/mtappack
http://shade.msu.ru/~msu-se/mtappack_kolibri_src.rar

Posted: Thu Feb 23, 2006 1:17 am
by Mario79
diamond
Обнаружил такое ограничение - FASM упакованный MTAPPACK отказывается компилировать. На доске отладке пишет, что не хватает памяти.

Posted: Thu Feb 23, 2006 12:57 pm
by willow
Вероятно, MTAPPACK выделяет распакованному FASM недостаточно памяти

Posted: Thu Feb 23, 2006 3:25 pm
by mike.dld
А может дело в самом FASM'е?

Posted: Thu Feb 23, 2006 4:20 pm
by Mario79
mike.dld
При упаковке MXP такой проблемы нету, по этому это глюк не фасм, а упаковщика.

Posted: Sun Feb 26, 2006 4:08 pm
by diamond
Используйте ключ /0 Windows-версии, эквивалентный ключу -0 Kolibri-версии и флажку "force memory size increase".
Это увеличивает размер памяти, используемой приложением, но неинициализированные данные зануляются (без ключа в неинициализированных данных будет мусор). У других упаковщиков этого нет, поскольку они безусловно добавляют память.

Posted: Sun Feb 26, 2006 4:44 pm
by Mario79
diamond
А несложно в Колибри версию добавить управляющих элементов для выбора параметров в графическом виде?

Posted: Sun Feb 26, 2006 6:04 pm
by Иван Поддубный
Да, действительно, после упаковки с помощью MXP программа требует примерно на 200-400 байт больше :)

Вот stub для MXP-LZO... У NRV почти такой же.

Code: Select all

; ===========================================================================
;                      Menuet eXecutable Packer 0.10
; ===========================================================================
;    Coded by Ivan Poddubny
;    Based on picoLZO for C-- by Kai-Hong Chen
;
;    miniLZO -- mini subset of the LZO real-time data compression library
;
;    Markus F.X.J. Oberhumer
;    <markus@oberhumer.com>
;    http://www.oberhumer.com/opensource/lzo/
;
; ===========================================================================

; ===[ IDEA ]================================================================
;
; 1) copy [decompression routine + compressed program]
;      out of the original program memory area
; 2) decompress all the stuff RIGHT to the header (i.e. offset = 0x0)
; 3) set the new stack to [stack_ptr] from the restored header
; 4) free memory used by moved & compressed image, decompressor remains there
; 5) jump to [entry_point] from the decompressed header
;
; ===[ HEADER ]==============================================================

  use32
  org 0x0

  include "MACROS.INC"

                  db 'MENUET01'
  temp_value      dd 1
  entry_point     dd START
  file_size       dd 0     ; stub + compr
  memory_size     dd 0     ; stub + compr + oldmem + 0x1000
  stack_ptr       dd 0     ; stub + compr + oldmem + 0x1000
  param_area      dd 0     ; this stub doesn't use parameters
  tmp_area        dd 0     ; oldmem
  compr_size      dd 0


; ===[ CODE ]================================================================

START:
        xor     eax, eax

        mov     ecx, decompr_size
        mov     [eax], ecx
        add     ecx, [eax + compr_size]

        mov     esi, decompressor
        mov     edi, [eax + tmp_area]
        push    edi
        rep     movsb

        jmp     dword [esp]

decompressor:
        pop     esi
        add     esi, [eax]
        xor     edi, edi

        include "UNPACK.ASM"

        xor     eax, eax
        mov     esp, [eax + stack_ptr]

        mov     ecx, decompr_size
        add     ecx, [eax + memory_size]
        inc     eax                       ; eax equaled 0, now it contains  1
        xchg    eax, ebx                  ; ebx = 1
        mov     eax, 64                   ; eax = 64 - resize memory
        int     0x40

        ; 0x40 should return zero in eax
        jmp     [eax+entry_point]
decompr_size = $ - decompressor

compr_ptr:

Posted: Mon Feb 27, 2006 6:22 pm
by diamond
Mario79
Каких параметров?
Иван Поддубный
Дополнительная память требуется не только для stub'а, но и для упакованных данных, а их обычно существенно больше, чем 200-400 байт

Posted: Mon Feb 27, 2006 7:11 pm
by diamond
[offtop]
Кстати о глюках fasm'a: Kolibri-версия при компиляции формата PE не записывает в файл MZ-заглушку (обнаружено при тестировании эмулятора на исходниках эмулятора)
[/offtop]

Posted: Mon Feb 27, 2006 7:14 pm
by Mario79
diamond
А как ты думаешь - ведь неудобно запускать каждый раз из консоли твой упаковщик с параметром. Может быть, стоит для Колибри сделать выбор и в графическом виде.

Posted: Wed Mar 01, 2006 5:05 pm
by diamond
Mario79
Так уже давно есть соответствующий флажок "force memory size increasing, zero uninit data"...