RAR wersja 2.50 - Informacje techniczne ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FORMAT ARCHIWUM OPISANY PONIスEJ DOTYCZY TYLKO WERSJI OD 1.50 WZWYス ============================================================================ Format archiwum RAR'a ============================================================================ Archiwum sk・da siゥ z blok「w o r「セnej d・go歪i. 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・go bloku lub jego czゥ歪i 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詫i (HEAD_FLAGS & 0x8000) != 0 Ca・owity rozmiar bloku to HEAD_SIZE je詫i (HEAD_FLAGS & 0x8000) == 0 lub HEAD_SIZE+ADD_SIZE je詫i 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詫i ustawiony, starsze wersje RAR'a zignoruj・ blok i usun・ go podczas aktualizacji archiwum. je詫i zgaszony, blok jest kopiowany do nowego archiwum podczas jego aktualizacji; 0x8000 - je詫i ustawiony, pole ADD_SIZE jest obecne i ca・owitym 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詫i napotka・・koniec archiwum to zako臘z 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詫i konieczne jest odczytanie bloku: je詫i HEAD_TYPE==0x74 odczytaj nag阿wek pliku (pierwsze 7 bajt「w juセ zosta・ 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詫i (HEAD_FLAGS & 0x8000) odczytaj ADD_SIZE bajt「w Je詫i konieczne jest pominiゥcie bloku: pomi・HEAD_SIZE-7 bajt「w je詫i (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・歪iwie 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・ 0x10 - nieuセywany 0x20 - archiwum posiada informacjゥ autentyczno歪i pozosta・ bity w HEAD_FLAGS s・ zarezerwowane do uセytku wewnゥtrznego HEAD_SIZE ca・owity rozmiar nag阿wka archiwum 挨cznie z komentarzem 2 bajty RESERVED1 zarezerwowane 2 bajty RESERVED2 zarezerwowane 4 bajty Blok obecny je詫i (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・m 0x08 - plik posiada komentarz 0x10 - uセyta jest informacja z poprzedniego pliku (znacznik ci・g・歪i) (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・wnika 64 Kb 0 0 1 - rozmiar s・wnika 128 Kb 0 1 0 - rozmiar s・wnika 256 Kb 0 1 1 - rozmiar s・wnika 512 Kb 1 0 0 - rozmiar s・wnika 1024 Kb 1 0 1 - zarezerwowane 1 1 0 - zarezerwowane 1 1 1 - plik jest katalogiem (HEAD_FLAGS & 0x8000) == 1, poniewaセ pe・y rozmiar bloku to HEAD_SIZE + PACK_SIZE HEAD_SIZE pe・y 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・ 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・go歪i NAME_SIZE bajt「w Blok obecny je詫i (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・owity 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・y rozmiar bloku to HEAD_SIZE + DATA_SIZE HEAD_SIZE ca・owity rozmiar bloku 2 bajty DATA_SIZE ca・owity rozmiar danych 4 bajty SUB_TYPE typ pod-bloku 2 bajty RESERVED musi by・0 1 bajt Inne pola inne pola w zaleセno歪i 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・y rozmiar bloku to HEAD_SIZE + DATA_SIZE HEAD_SIZE ca・owity rozmiar bloku 2 bajty DATA_SIZE ca・owity 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詫i rozmiar CRC jest mniejszy niセ 4 bajty, uセyte s・ tylko m・dsze 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.
Numik72