Packer v2.2

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 11:02, 3 cze 2016
Mono (Dyskusja | wkład)
(procedura dekompresująca - styl.)
← Previous diff
Aktualna wersja
Seban (Dyskusja | wkład)
(styl)
Linia 38: Linia 38:
... ...
 +
 +== Ciekawostki ==
 +
 +Obecnie trwają pracę nad pełną rekonstrukcją źródeł programu, oraz nad PC-tową wersją, która to umożliwi szybką kompresję plików z linii poleceń na komputerach PC. Po zakończeniu prac, zrekonstruowany kod źródłowy oraz wersja packer-a dla PC zostanie upubliczniona.
== Pliki do pobrania == == Pliki do pobrania ==

Aktualna wersja

Grafika:Packer2.2_by_Sote.gif

Spis treści

Historia

Packer v.2.2 to program do kompresji plików stworzony w 1994 roku przez Adama "SoTe" Bieniasa. SoTe stworzył go po napisaniu swoich cruncherów z serii Code3 Cruncher. Narzędzie powstało z potrzeby chwili, ponieważ na scenie nie było w owym czasie szybkiego i efektywnego narzędzia do kompresji plików "wszelakich". Program był szeroko wykorzystywany przez Slight, np. artykuły oraz wszelakie pliki magazynu dyskowego Barymag były spakowane przy użyciu tego programu. Po wydaniu drugiego numeru magazynu dyskowego Barymag narzędzie zostało upublicznione. Program potrafi kompresować dowolne zbiory, i w dość ograniczonym stopniu potrafi również dokonać kompresji programów w binarnym formacie DOS. W przeciwieństwie do programów typu Super Packer, Packer v2.2 był przeznaczony dla bardziej zaawansowanych użytkowników i wymagał od użytkownika podstawowej znajomości struktury plików binarnych, oraz podstawowej znajomości asemblera w przypadku gdy użytkownik chciał dokonać dekompresji danych spakowanych przy użyciu Packer v2.2 w swoim programie.

Algorytm Kompresji

Algorytm wykorzystany do kompresji danych przez Packer v2.2 to mutacja LZ77/LZSS opracowana przez SoTe, ten algorytm kompresji w tamtych czasach potocznie nazywano implodingiem. Imploding zastosowany w Packer v2.2 ma jedno drzewo "znacznikowe". Drzewo to wybrane doświadczalnie jest trochę podobne do Shannon-Fano i służy do oznaczania długości sekwencji, a do oznaczenia, że dany bajt nie zawiera się w żadnej sekwencji używany jest jeden bit; 0 - sekwencja spakowana, 1 - kolejne 8-bitów to ten właśnie bajt.

Szybkość dekompresji

Większość programów kompresujących w tamtych czasach spakowane dane zapisywało jako ciąg bitów, algorytm kompresji korzystał z procedury "put bits", która dokonywała zapisu określonej ilości bitów do strumienia wyjściowego. Dane po kompresji nie były wyrównane do granicy bajtów i pobranie nawet nieskompresowanej sekwencji bajtów wymagało od procedury dekompresującej skorzystanie z procedury która ze strumienia wejściowego pobierała określoną ilość bitów. Pobieranie w ten sposób setek bajtów było po prostu czasochłonne. W tamtych czasach na takiej zasadzie tak działały procedury dekompresujące np. Cruncher 5.0 czy Code3 Cruncher. SoTe po pewnym czasie od stworzenia Code3 Cruncher-a wpadł na pomysł aby zmienić nieco organizację spakowanych danych, w taki sposób aby wszystkie dane będące bajtami zostały zapisane jako normalne bajty w strumieniu danych skompresowanych, w wszelakie informacje bitowe były trzymane razem i możliwe do pobrania przez procedurę "get bit", takie przeorganizowanie danych spowodowało iż procedura dekompresująca mogła być znacznie przyspieszona.

procedura dekompresująca

Ze względu na dość prosty interface, nietypowe podejście do sposobu kompresji, brak dokumentacji dołączonej do programu (w tym brak źródeł procedury dekompresującej) oraz wymóg sporego doświadczenia u użytkownika, program nie przyjął się i nie używał go nikt poza ludźmi związanymi z grupą Slight. Gdy grupa Slight zaprzestała aktywnej działalności na scenie program zaginął w odmętach zapomnienia. Przyszedł jednak czas w którym Seban musiał się zmierzyć z danymi spakowanymi tym programem. Po latach dzięki pomocy Mikera program został odnaleziony, co prawda tylko sam plik wykonywalny, ale to pozwoliło Sebanowi na deasemblację programu i odtworzenie kodu źródłowego procedury dekompresującej, przy okazji została ona nieco poprawiona i wzbogacona o komentarze. Źródła procedury dekompresującej znajdują się w archiwum razem z programem Packer v2.2.

struktura danych po kompresji

Struktura danych po spakowaniu jest bardzo prosta. Spakowane dane zawierają 5 bajtów nagłówka a następnie następuje ciąg bajtów reprezentujących dane w po kompresji.


offsetdługośćopis
$0000$02adres dekompresji danych (Low Byte,High Byte)
$0002$02długość danych po dekompresji (Low Byte,High Byte)
$0004$01offset byte
$0005....spakowane dane


Przykład użycia procedury dekompresującej we własnym programie


...

Przykład wykorzystania programu do kompresji pliku w formacie binarnym


...

Ciekawostki

Obecnie trwają pracę nad pełną rekonstrukcją źródeł programu, oraz nad PC-tową wersją, która to umożliwi szybką kompresję plików z linii poleceń na komputerach PC. Po zakończeniu prac, zrekonstruowany kod źródłowy oraz wersja packer-a dla PC zostanie upubliczniona.

Pliki do pobrania

Archiwum zawierające Packer v.2.2 oraz źródła depackera


Ten artykuł to tylko zalążek. Możesz pomóc rozwojowi Atariki poprzez rozszerzenie go o więcej informacji.

Personal tools