RAR versione 4.x - Informazioni tecniche
Il formato d'archivio di seguito descritto è valido solo per le versione dalla 1.50 in poi |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Formato di un archivio RAR | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Il file di un archivio consiste in una serie di blocchi a lunghezza variabile. L'ordine di questi blocchi può variare, ma il primo deve essere un blocco di marcaggio, seguito da un blocco d'intestazione archivio. Ogni blocco inizia con i seguenti campi:
Il campo ADD_SIZE è presente solo se (HEAD_FLAGS & 0x8000) != 0 La dimensione del blocco è HEAD_SIZE se (HEAD_FLAGS & 0x8000) == 0 o HEAD_SIZE+ADD_SIZE se il campo ADD_SIZE è presente, quando appunto (HEAD_FLAGS & 0x8000) != 0. In ogni blocco i seguenti bit nel campo HEAD_FLAGS hanno lo stesso significato:
Tipi di blocchi definiti:
Il blocco di commento è utilizzato attualmente solo all'interno di altri blocchi e non può esistere separato. Il processo di gestione dell'archivio avviene come segue:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Formati dei Blocchi | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Blocco di marcaggio ( MARK_HEAD )
Attualmente il blocco di marcaggio viene considerato come una sequenza ben definita di bytes: 0x52 0x61 0x72 0x21 0x1a 0x07 0x00. Intestazione dell'archivio ( MAIN_HEAD )
|
HEAD_CRC CRC | 2 bytes | dei campi da HEAD_TYPE a RESERVED2 | ||||||||||||||||||
HEAD_TYPE | 1 byte | Tipo di blocco: 0x73 | ||||||||||||||||||
HEAD_FLAGS | 2 bytes | Bit indicatori:
|
||||||||||||||||||
HEAD_SIZE | 2 bytes | Dimensione totale dell'intestazione dell'archivio, compreso l'eventuale commento | ||||||||||||||||||
RESERVED1 | 2 bytes | Riservato | ||||||||||||||||||
RESERVED2 | 4 bytes | Riservato |
Intestazione del file (File nell'archivio)
HEAD_CRC | 2 bytes | CRC dei campi da HEAD_TYPE a FILEATTR e del nome del file | ||||||||||||||||||||||||||||||||||||||||
HEAD_TYPE | 1 byte | Tipo blocco: 0x74 | ||||||||||||||||||||||||||||||||||||||||
HEAD_FLAGS | 2 bytes | Bit indicatori:
|
||||||||||||||||||||||||||||||||||||||||
HEAD_SIZE | 2 bytes | Dimensione totale dell'intestazione, compreso il nome del file e l'eventuale commento. | ||||||||||||||||||||||||||||||||||||||||
PACK_SIZE | 4 bytes | Dimensione del file compresso. | ||||||||||||||||||||||||||||||||||||||||
UNP_SIZE | 4 bytes | Dimensione del file non compresso. |
||||||||||||||||||||||||||||||||||||||||
HOST_OS | 1 byte | Sistema operativo utilizzato per l'archiviazione: 0 - MS DOS 1 - OS/2 2 - Windows 3 - Unix 4 - Mac OS 5 - BeOS |
||||||||||||||||||||||||||||||||||||||||
FILE_CRC | 4 bytes | CRC del file. | ||||||||||||||||||||||||||||||||||||||||
FTIME | 4 bytes | Data ed orario nel formato standard MS DOS. | ||||||||||||||||||||||||||||||||||||||||
UNP_VER | 1 byte | Versione di RAR necessaria per estrarre il file. Il numero della versione è memorizzato nel formato 10 * cifra_versione_maggiore + cifra_versione_minore. |
||||||||||||||||||||||||||||||||||||||||
METHOD | 1 byte | Metodo di compressione. 0x30 - memorizzazione 0x31 - compressione più veloce 0x32 - compressione veloce 0x33 - compressione normale 0x34 - compressione buona 0x35 - compressione migliore |
||||||||||||||||||||||||||||||||||||||||
NAME_SIZE | 2 bytes | Dimensione del nome del file. | ||||||||||||||||||||||||||||||||||||||||
ATTR | 4 bytes | Attributi del file. | ||||||||||||||||||||||||||||||||||||||||
HIGH_PACK_SIZE | 4 bytes | I 4 bytes alti del valore a 64 bit riferito alla dimesione del file compresso. Valore opzionale, presente solo se è attivo il bit 0x100 di HEAD_FLAGS. | ||||||||||||||||||||||||||||||||||||||||
HIGH_UNP_SIZE | 4 bytes | I 4 bytes alti del valore a 64 bit riferito alla dimensione del file non compresso. Valore opzionale, presente solo se è attivo il bit 0x100 di HEAD_FLAGS. | ||||||||||||||||||||||||||||||||||||||||
FILE_NAME | NAME_SIZE | Nome del file. | ||||||||||||||||||||||||||||||||||||||||
SALT | 8 bytes | presente se (HEAD_FLAGS & 0x400) != 0 | ||||||||||||||||||||||||||||||||||||||||
EXT_TIME | dimensione variabile | presente se (HEAD_FLAGS & 0x1000) != 0 |
Altri nuovi campo potranno apparire qui.
- Per gestire correttamene un archivio auto-estraente dovere saltare il modulo auto-estraente cercando il blocco di marcaggio. Non ci sono altri blocchi di marcaggio (0x52 0x61 0x72 0x21 0x1a 0x07 0x00) nel modulo auto-estraente.
- Il CRC viene calcolato utilizzando il polinomio standard 0xEDB88320. Nei casi in cui il valore del CRC è inferiore ai 4 bytes, verranno utilizzati soli i bytes d'ordine inferiore.