Professional Documents
Culture Documents
Tech Note
Tech Note
80 - Òåõíè÷åñêàÿ èíôîðìàöèÿ
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ÎÏÈÑÛÂÀÅÌÛÉ ÔÎÐÌÀÒ ÀÐÕÈÂÀ ÄÅÉÑÒÂÈÒÅËÅÍ ÒÎËÜÊÎ ÄËß RAR ÂÅÐÑÈÈ 1.50 È ÑÒÀÐØÅ
==========================================================================
Ôîðìàò àðõèâíîãî ôàéëà RAR
==========================================================================
Ôàéë àðõèâà ñîñòîèò èç áëîêîâ ðàçíîé äëèíû. Ïîðÿäîê ñëåäîâàíèÿ ýòèõ áëîêîâ
ìîæåò ìåíÿòüñÿ, íî ïåðâûì áëîêîì âñåãäà äîëæåí áûòü áëîê-ìàðêåð, çà êîòîðûì
ñëåäóåò áëîê çàãîëîâêà àðõèâà.
Êàæäûé áëîê íà÷èíàåòñÿ ñî ñëåäóþùèõ ïîëåé:
HEAD_CRC 2 áàéòà CRC âñåãî áëîêà èëè åãî ÷àñòè
HEAD_TYPE 1 áàéò Òèï áëîêà
HEAD_FLAGS 2 áàéòà Ôëàãè áëîêà
HEAD_SIZE 2 áàéòà Ðàçìåð áëîêà
ADD_SIZE 4 áàéòà Íåîáÿçàòåëüíîå ïîëå - äîáàâëåíèå ê ðàçìåðó áëîêà
Ïîëå ADD_SIZE ïðèñóòñòâóåò, òîëüêî åñëè (HEAD_FLAGS & 0x8000) != 0
Îáùèé ðàçìåð áëîêà óêàçàí â ïîëå HEAD_SIZE, åñëè (HEAD_FLAGS & 0x8000) == 0
èëè HEAD_SIZE+ADD_SIZE, åñëè åñòü ïîëå ADD_SIZE, ïðè ýòîì
(HEAD_FLAGS & 0x8000) != 0.
Âî âñåõ áëîêàõ ñëåäóþùèå áèòû â HEAD_FLAGS èìåþò îäèíàêîâîå çíà÷åíèå:
0x4000 - åñëè óñòàíîâëåí, òî ñòàðûå âåðñèè RAR áóäóò èãíîðèðîâàòü ýòîò áëîê
è óäàëÿòü åãî ïðè èçìåíåíèè àðõèâà;
åñëè íå óñòàíîâëåí, òî áëîê êîïèðóåòñÿ â íîâûé àðõèâíûé ôàéë ïðè
èçìåíåíèè àðõèâà;
0x8000 - åñëè óñòàíîâëåí, òî ïðèñóòñòâóåò ïîëå ADD_SIZE, è ðàçìåð ïîëíîãî
áëîêà ñîñòàâëÿåò HEAD_SIZE+ADD_SIZE.
Çàÿâëåííûå òèïû áëîêîâ:
HEAD_TYPE=0x72 áëîê-ìàðêåð
HEAD_TYPE=0x73 çàãîëîâîê àðõèâà
HEAD_TYPE=0x74 çàãîëîâîê ôàéëà
HEAD_TYPE=0x75 çàãîëîâîê êîììåíòàðèÿ ñòàðîãî òèïà
HEAD_TYPE=0x76 ýëåêòðîííàÿ ïîäïèñü ñòàðîãî òèïà
HEAD_TYPE=0x77 ñóááëîê ñòàðîãî òèïà
HEAD_TYPE=0x78 èíôîðìàöèÿ äëÿ âîññòàíîâëåíèÿ ñòàðîãî òèïà
HEAD_TYPE=0x79 ýëåêòðîííàÿ ïîäïèñü ñòàðîãî òèïà
HEAD_TYPE=0x7a ñóááëîê
Áëîê êîììåíòàðèÿ èñïîëüçóåòñÿ òîëüêî âíóòðè äðóãèõ áëîêîâ.
Îáðàáîòêà àðõèâà ïðîèñõîäèò ñëåäóþùèì îáðàçîì:
1. ×èòàåòñÿ è ïðîâåðÿåòñÿ áëîê-ìàðêåð
2. ×èòàåòñÿ çàãîëîâîê àðõèâà
3. ×èòàþòñÿ èëè ïðîïóñêàþòñÿ HEAD_SIZE-ðàçìåð(MAIN_HEAD) áàéò
4. Åñëè îáíàðóæåí êîíåö àðõèâà, òî îáðàáîòêà àðõèâà ïðåêðàùàåòñÿ, èíà÷å
÷èòàþòñÿ 7 áàéò â ïîëÿõ HEAD_CRC, HEAD_TYPE, HEAD_FLAGS, HEAD_SIZE.
5. Ïðîâåðÿåòñÿ HEAD_TYPE.
Åñëè HEAD_TYPE==0x74
ïðî÷èòàòü çàãîëîâîê ôàéëà (ïåðâûå 7 áàéò óæå ïðî÷èòàíû)
ïðî÷èòàòü èëè ïðîïóñòèòü HEAD_SIZE-ðàçìåð(FILE_HEAD) áàéò
Åñëè (HEAD_FLAGS & 0x100)
ïðî÷èòàòü èëè ïðîïóñòèòü HIGH_PACK_SIZE*0x100000000+PACK_SIZE áàéò
èíà÷å
ïðî÷èòàòü èëè ïðîïóñòèòü FILE_SIZE áàéò
èíà÷å
ïðî÷èòàòü ñîîòâåòñòâóþùèé áëîê HEAD_TYPE:
ïðî÷èòàòü HEAD_SIZE-7 áàéò
åñëè (HEAD_FLAGS & 0x8000)
ïðî÷èòàòü ADD_SIZE áàéò
6. Ïåðåéòè ê øàãó 4.
==========================================================================
Ôîðìàòû áëîêîâ
==========================================================================
Áëîê-ìàðêåð (MARK_HEAD)
~~~~~~~~~~~~~~~~~~~~~~~
HEAD_CRC Âñåãäà 0x6152
2 áàéòà
HEAD_TYPE Òèï çàãîëîâêà: 0x72
1 áàéò
HEAD_FLAGS Âñåãäà 0x1a21
2 áàéòà
HEAD_SIZE Ðàçìåð áëîêà = 0x0007
2 áàéòà
Áëîê-ìàðêåð â äåéñòâèòåëüíîñòè ñ÷èòàåòñÿ ôèêñèðîâàííîé ïîñëåäîâàòåëüíîñòüþ
áàéò: 0x52 0x61 0x72 0x21 0x1a 0x07 0x00
==========================================================================
Ïðèìå÷àíèÿ
==========================================================================
1. Äëÿ îáðàáîòêè SFX-àðõèâà òðåáóåòñÿ ïðîïóñòèòü ìîäóëü SFX è íàéòè
â àðõèâå áëîê-ìàðêåð. Â ñàìîì SFX-ìîäóëå ïîñëåäîâàòåëüíîñòü áàéòîâ
áëîêà-ìàðêåðà (0x52 0x61 0x72 0x21 0x1a 0x07 0x00) îòñóòñòâóåò.
2. CRC âû÷èñëÿåòñÿ ñ ïîìîùüþ ñòàíäàðòíîãî ïîëèíîìà 0xEDB88320.  ñëó÷àå
åñëè ðàçìåð CRC ìåíüøå 4 áàéò, èñïîëüçóþòñÿ òîëüêî ìëàäøèå áàéòû.