home *** CD-ROM | disk | FTP | other *** search
-
- RAR wersja 2.50 - Informacje techniczne
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-
- FORMAT ARCHIWUM OPISANY PONI╜EJ DOTYCZY TYLKO WERSJI OD 1.50 WZWY╜
-
-
- ============================================================================
- Format archiwum RAR'a
- ============================================================================
-
- Archiwum skêada si⌐ z bloków o ró╛nej dêugoÿci. Kolejnoÿå tych bloków mo╛e
- byå ró╛na, lecz pierwszym blokiem musi byå blok identyfikacyjny, po którym
- musi wystÑpiå blok nagêówka archiwum.
-
- Ka╛dy blok rozpoczyna si⌐ nast⌐pujÑcymi polami:
-
- HEAD_CRC 2 bajty CRC (suma kontrolna) caêego bloku lub jego cz⌐ÿci
- HEAD_TYPE 1 bajt typ bloku
- HEAD_FLAGS 2 bajty znaczniki bloku
- HEAD_SIZE 2 bajty rozmiar bloku
- ADD_SIZE 4 bajty pole opcjonalne
-
- Pole ADD_SIZE jest obecne tylko jeÿli (HEAD_FLAGS & 0x8000) != 0
-
- Caêkowity rozmiar bloku to HEAD_SIZE jeÿli (HEAD_FLAGS & 0x8000) == 0
- lub HEAD_SIZE+ADD_SIZE jeÿli pole ADD_SIZE jest obecne - gdy
- (HEAD_FLAGS & 0x8000) != 0.
-
- W ka╛dym bloku nast⌐pujÑce bity w polu HEAD_FLAGS oznaczajÑ:
-
- 0x4000 - jeÿli ustawiony, starsze wersje RAR'a zignorujÑ blok i usunÑ go
- podczas aktualizacji archiwum.
- jeÿli zgaszony, blok jest kopiowany do nowego archiwum podczas
- jego aktualizacji;
-
- 0x8000 - jeÿli ustawiony, pole ADD_SIZE jest obecne i caêkowitym rozmiarem
- bloku jest HEAD_SIZE+ADD_SIZE.
-
- Typy bloków:
-
- HEAD_TYPE=0x72 blok identyfikacyjny
- HEAD_TYPE=0x73 nagêówek archiwum
- HEAD_TYPE=0x74 nagêówek pliku
- HEAD_TYPE=0x75 nagêówek komentarza
- HEAD_TYPE=0x76 dodatkowa informacja
- HEAD_TYPE=0x77 pod-blok
- HEAD_TYPE=0x78 dane naprawcze
-
- Blok komentarza jest u╛ywany tylko w innych blokach i nie wyst⌐puje
- samodzielnie.
-
- Przetwarzanie archiwum:
-
- 1. Odczytaj i sprawd½ blok identyfikacyjny
- 2. Odczytaj nagêówek archiwum
- 3. Odczytaj lub pomiΣ HEAD_SIZE-sizeof(MAIN_HEAD) bajtów
- 4. Jeÿli napotkaêeÿ koniec archiwum to zakoΣcz przetwarzanie archiwum,
- w przeciwnym wypadku odczytaj 7 bajtów do pól HEAD_CRC, HEAD_TYPE,
- HEAD_FLAGS, HEAD_SIZE.
- 5. Sprawd½ HEAD_TYPE.
- Jeÿli konieczne jest odczytanie bloku:
- jeÿli HEAD_TYPE==0x74
- odczytaj nagêówek pliku (pierwsze 7 bajtów ju╛ zostaêo odczytane)
- odczytaj lub pomiΣ HEAD_SIZE-sizeof(FILE_HEAD) bajtów
- odczytaj lub pomiΣ FILE_SIZE bajtów
- w przeciwnym wypadku
- odczytaj odpowiedni blok:
- odczytaj HEAD_SIZE-7 bajtów
- jeÿli (HEAD_FLAGS & 0x8000)
- odczytaj ADD_SIZE bajtów
- Jeÿli konieczne jest pomini⌐cie bloku:
- pomiΣ HEAD_SIZE-7 bajtów
- jeÿli (HEAD_FLAGS & 0x8000)
- pomiΣ ADD_SIZE bajtów
- 6. id½ do punktu 4.
-
-
- ============================================================================
- Formaty bloków
- ============================================================================
-
- Blok identyfikacyjny (MARK_HEAD)
-
-
- HEAD_CRC zawsze 0x6152
- 2 bajty
-
- HEAD_TYPE typ nagêówka: 0x72
- 1 bajt
-
- HEAD_FLAGS zawsze 0x1a21
- 2 bajty
-
- HEAD_SIZE rozmiar bloku = 0x0007
- 2 bajty
-
- Blok identyfikacyjny jest wêaÿciwie staêÑ sekwencjÑ bajtów:
- 0x52 0x61 0x72 0x21 0x1a 0x07 0x00
-
-
-
- Nagêówek archiwum (MAIN_HEAD)
-
-
- HEAD_CRC CRC pól od HEAD_TYPE do RESERVED2
- 2 bytes
-
- HEAD_TYPE typ nagêówka: 0x73
- 1 bajt
-
- HEAD_FLAGS znaczniki bitowe:
- 2 bajty
- 0x01 - wolumin (archiwum jest woluminem)
- 0x02 - archiwum posiada komentarz
- 0x04 - archiwum jest zablokowane
- 0x08 - archiwum jest ciÑgêe
- 0x10 - nieu╛ywany
- 0x20 - archiwum posiada informacj⌐ autentycznoÿci
-
- pozostaêe bity w HEAD_FLAGS sÑ zarezerwowane do u╛ytku
- wewn⌐trznego
-
- HEAD_SIZE caêkowity rozmiar nagêówka archiwum êÑcznie z komentarzem
- 2 bajty
-
- RESERVED1 zarezerwowane
- 2 bajty
-
- RESERVED2 zarezerwowane
- 4 bajty
-
-
- Blok obecny jeÿli (HEAD_FLAGS & 0x02) != 0
- komentarza
-
-
-
- Nagêówek pliku (plik w archiwum)
-
-
- HEAD_CRC CRC pól od HEAD_TYPE do FILEATTR
- 2 bajty i nazwy pliku
-
- HEAD_TYPE typ nagêówka: 0x74
- 1 bajt
-
- HEAD_FLAGS znaczniki bitowe:
- 2 bajty
- 0x01 - plik kontynuowany z poprzedniego woluminu
- 0x02 - plik kontynuowany w nast⌐pnym woluminie
- 0x04 - plik zaszyfrowany hasêem
- 0x08 - plik posiada komentarz
- 0x10 - u╛yta jest informacja z poprzedniego pliku
- (znacznik ciÑgêoÿci)
- (dla RAR'a od wersji 2.0 wzwy╛)
-
- bity 7 6 5 (dla RAR'a od wersji 2.0 wzwy╛)
-
- 0 0 0 - rozmiar sêownika 64 Kb
- 0 0 1 - rozmiar sêownika 128 Kb
- 0 1 0 - rozmiar sêownika 256 Kb
- 0 1 1 - rozmiar sêownika 512 Kb
- 1 0 0 - rozmiar sêownika 1024 Kb
- 1 0 1 - zarezerwowane
- 1 1 0 - zarezerwowane
- 1 1 1 - plik jest katalogiem
-
- (HEAD_FLAGS & 0x8000) == 1, poniewa╛ peêny rozmiar bloku to
- HEAD_SIZE + PACK_SIZE
-
- HEAD_SIZE peêny rozmiar nagêówka pliku wraz z nazwÑ pliku i komentarzem
- 2 bajty
-
- PACK_SIZE rozmiar pliku po kompresji
- 4 bajty
-
- UNP_SIZE oryginalny rozmiar pliku
- 4 bajty
-
- HOST_OS system operacyjny, w którym nastÑpiêa archiwizacja
- 1 bajt 0 - MS DOS
- 1 - OS/2
- 2 - Win32
- 3 - Unix
- 4 - Mac OS
-
- FILE_CRC CRC pliku
- 4 bajty
-
- FTIME data i czas w standardowym formacie MS DOS
- 4 bajty
-
- UNP_VER wersja RAR'a potrzebna do wypakowania pliku
- 1 bajt
-
- METHOD metoda kompresji
- 1 bajt
-
- NAME_SIZE rozmiar nazwy pliku
- 2 bajty
-
- ATTR atrybuty pliku
- 4 bajty
-
- FILE_NAME nazwa pliku - ciÑg znaków o dêugoÿci NAME_SIZE bajtów
-
-
- Blok obecny jeÿli (HEAD_FLAGS & 0x08) != 0
- komentarza
-
-
-
- Blok komentarza
-
-
- HEAD_CRC CRC pól od HEAD_TYPE do COMM_CRC
- 2 bajty
-
- HEAD_TYPE typ nagêówka: 0x75
- 1 bajt
-
- HEAD_FLAGS znaczniki bitowe
- 2 bajty
-
- HEAD_SIZE rozmiar nagêówka komentarza + rozmiar komentarza
- 2 bajty
-
- UNP_SIZE oryginalny rozmiar komentarza
- 2 bajty
-
- UNP_VER wersja RAR'a potrzebna do wypakowania komentarza
- 1 bajt
-
- METHOD metoda kompresji
- 1 bajt
-
- COMM_CRC CRC komentarza
- 2 bajty
-
- COMMENT tekst komentarza
-
-
-
- Dodatkowy blok informacyjny
-
-
- HEAD_CRC CRC bloku
- 2 bajty
-
- HEAD_TYPE typ nagêówka: 0x76
- 1 bajt
-
- HEAD_FLAGS znaczniki bitowe
- 2 bajty
-
- HEAD_SIZE caêkowity rozmiar bloku
- 2 bajty
-
- INFO inne dane
-
-
- Pod-blok
-
- Za obiektem w archiwum (blokiem lub nagêówkiem) mo╛e znajdowaå si⌐ pod-blok.
- Pod-blok zale╛y od poprzedzajÑcego go obiektu. Pod-blok mo╛e byå usuwany
- lub przenoszony do nowego archiwum podczas aktualizacji.
-
- Pod-blok zawiera nast⌐pujÑce pola:
-
- HEAD_CRC CRC bloku
- 2 bajty
-
- HEAD_TYPE typ nagêówka: 0x77
- 1 bajt
-
- HEAD_FLAGS znaczniki bitowe
- 2 bajty
- (HEAD_FLAGS & 0x8000) == 1, poniewa╛ peêny
- rozmiar bloku to HEAD_SIZE + DATA_SIZE
-
- HEAD_SIZE caêkowity rozmiar bloku
- 2 bajty
-
- DATA_SIZE caêkowity rozmiar danych
- 4 bajty
-
- SUB_TYPE typ pod-bloku
- 2 bajty
-
- RESERVED musi byå 0
- 1 bajt
-
- Inne pola inne pola w zale╛noÿci od typu pod-bloku
-
-
- Pod-blok rozszerzonych atrybutów OS/2
-
-
- HEAD_CRC CRC bloku
- 2 bajty
-
- HEAD_TYPE typ nagêówka: 0x77
- 1 bajt
-
- HEAD_FLAGS znaczniki bitowe
- 2 bajty
- (HEAD_FLAGS & 0x8000) == 1, poniewa╛ peêny
- rozmiar bloku to HEAD_SIZE + DATA_SIZE
-
- HEAD_SIZE caêkowity rozmiar bloku
- 2 bajty
-
- DATA_SIZE caêkowity rozmiar danych (rozmiar skompresowanych
- 4 bajty rozszerzonych atrybutów)
-
- SUB_TYPE 0x100
- 2 bajty
-
- RESERVED musi byå 0
- 1 bajt
-
- UNP_SIZE oryginalny rozmiar rozszerzonych atrybutów
- 4 bajty
-
- UNP_VER wersja RAR'a potrzebna do wypakowania rozszerzonych atrybutów
- 1 bajt
-
- METHOD metoda kompresji
- 1 bajt
-
- EA_CRC CRC rozszerzonych atrybutów
- 4 bajty
-
-
- ============================================================================
- Uwagi
- ============================================================================
-
- 1. Aby przetwarzaå archiwum SFX nale╛y pominÑå szukanie bloku
- identyfikacyjnego. Moduê SFX nie zawiera tego bloku (0x52 0x61 0x72 0x21
- 0x1a 0x07 0x00).
-
- 2. CRC liczy si⌐ przy u╛yciu standardowego wielomianu 0xEDB88320. Jeÿli
- rozmiar CRC jest mniejszy ni╛ 4 bajty, u╛yte sÑ tylko mêodsze bajty.
-
- 3. Oznaczenia metod kompresji:
- 0x30 - brak kompresji
- 0x31 - najszybsza kompresja
- 0x32 - szybka kompresja
- 0x33 - normalna kompresja
- 0x34 - dobra kompresja
- 0x35 - najlepsza kompresja
-
- 4. Wersja RAR'a konieczna do rozpakowania archiwum jest kodowana
- w nast⌐pujÑcy sposób: 10 * Gêówna wersja + wersja poboczna.
-