XXD(1) General Commands Manual XXD(1) NOME xxd - Produce lista esadecimale da un file binario o viceversa. SINTASSI xxd -h[elp] xxd [opzioni] [input_file [output_file]] xxd -r[evert] [opzioni] [input_file [output_file]] DESCRIZIONE xxd crea un'immagine esadecimale di un dato file o dello `standard input'. Puo anche ricostruire da un'immagine esadecimale il file binario originale. Come uuencode(1) e uudecode(1) permette di trasmettere dati binari in una rappresentazione ASCII `a prova di email', ma ha anche il vantaggio di poter decodificare sullo `standard output'. Inoltre, puo essere usato per effettuare delle modifiche (patch) a file binari. OPZIONI Se non si specifica un input_file il programma legge dallo `standard input'. Se input_file e specificato come il carattere `-' , l'input e letto dallo `standard input'. Se non si specifica un output_file (o si mette al suo posto il carattere `-' ), i risultati sono inviati allo `standard output'. Si noti che la scansione dei caratteri e "pigra", e non controlla oltre la prima lettera di un'opzione, a meno che l'opzione sia seguita da un parametro. Gli spazi fra una singola lettera di opzione e il relativo parametro sono facoltativi. I parametri delle opzioni possono essere specificati usando la notazione decimale, esadecimale oppure ottale. Pertanto -c8, -c 8, -c 010 e -cols 8 sono tutte notazioni equivalenti fra loro. -a | -autoskip Richiesta di omissione: Un singolo '*' rimpiazza righe a zeri binari. Default: off. -b | -bits Richiesta di un'immagine binaria (cifre binarie), invece che esadecimale. Quest'opzione scrive un byte come otto cifre "1" e "0" invece di usare i numeri esadecimali. Ogni riga e preceduta da un indirizzo in esadecimale e seguita da una decodifica ASCII (o EBCDIC). Le opzioni -p, -i, specificabili dalla riga comando, non funzionano in questo modo. -c colonne | -cols colonne In ogni riga sono formattate colonne. Valore di default 16 (-i: 12, -ps: 30, -b: 6). Non c'e un valore massimo per -ps; se si specifica 0 viene scritta un'unica lunga riga di output. -C | -capitalize Mette in maiuscolo i nomi di variabili nello stile delle `include' C, se si usa -i. -E | -EBCDIC Cambia la codifica della colonna di destra da ASCII a EBCDIC. Questo non modifica la rappresentazione esadecimale. Non ha senso specificare quest'opzione in combinazione con -r, -p o -i. -e Considera la lista esadecimale come avente codifica `little- endian'. Quest'opzione tratta i gruppi di byte come parole in codifica `little-endian'. Il raggruppamento di default dei byte a 4 a 4 puo essere cambiato usando -g. Quest'opzione si applica solo alla lista esadecimale, Lasciando inalterata la rappresentazione ASCII (or EBCDIC). Le opzioni della riga di comando -r, -p, -i non funzionano in questa modalita. -g numero | -groupsize numero Separa ogni gruppo di byte in output (di due caratteri esadecimali o otto caratteri binari ognuno) con uno spazio bianco. Specificando -g 0 i byte di output non sono separati da alcuno spazio. ha come valore di default 2 in modalita normale [esadecimale], 4 in modalita `little-endian' e 1 in modalita binaria. Il raggruppamento non si applica agli stili `PostScript' e `include'. -h | -help Stampa un sommario dei comandi disponibili ed esce. Non viene fatto null'altro. -i | -include L'output e un file `include' in C. Viene preparata la definizione completa del vettore (col nome del file di input), tranne quando xxd legga dallo `standard input'. -l numero | -len numero Il programma esce dopo aver scritto byte. -n nome | -name nome Specifica il nome del vettore in output quando si usa -i. Il vettore viene chiamato nome e la sua lunghezza viene chiamata nome_len. -o incremento Aggiunge alla posizione visualizzata dei byte del file. -p | -ps | -postscript | -plain L'output e nello stile di un dump esadecimale continuo sotto postscript. Noto anche come stile esadecimale semplice. -r | -revert Ricostruisce: converte (o mette una patch) da immagine esadecimale, a file binario. Se non scrive sullo `standard output', xxd scrive nel file di output in maniera continua, senza interruzioni. Usare la combinazione -r -p per leggere un dump in stile esadecimale semplice, senza l'informazione del numero di riga e senza un particolare tracciato di colonna. Spazi o righe vuote possono essere presenti dappertutto [e vengono ignorati]. Usare la combinazione -r -b per leggere un dump binario, invece che un dump esadecimale. -R [quando] Nell'output i valori esadecimali e i caratteri corrispondenti hanno entrambi lo stesso colore, a seconda del valore esadecimale. Utile soprattutto a distinguere i caratteri stampabili da quelli non stampabili. quando puo assumere i valori never, always, o auto. Quando la variabile d'ambiente $NO_COLOR e impostata, la colorazione viene disabilitata. -seek distanza Usato con l'opzione -r: (ricostruzione), viene aggiunta alla posizione nel file trovata nella immagine esadecimale. -s [+][-]seek Inizia a byte assoluti (o relativi) di distanza all'interno di input_file. + indica che il `seek' e relativo alla posizione corrente nel file `standard input' (non significativo quando non si legge da `standard input'). - indica che il `seek' dovrebbe posizionarsi al numero specificato di caratteri dalla fine dell'input (o se in combinazione con + : prima della posizione corrente nel file `standard input'). Se non si specifica l'opzione -s, xxd inizia dalla posizione corrente all'interno del file. -u Usa lettere esadecimali maiuscole. Per default si usano lettere minuscole. -v | -version Visualizza la stringa contenente la versione del programma. ATTENZIONE xxd -r e capace di operare "magie" nell'utilizzare l'informazione "numero di riga". Se e possibili posizionarsi tramite `seek' sul file di output, il numero di riga di ogni riga esadecimale puo essere non ordinato, delle righe possono mancare, o sovrapporsi. In tal caso xxd usera lseek(2) per posizionarsi all'interno del file. Se per il file di output non si puo usare `seek', sono permessi solo dei "buchi", che saranno riempiti con zeri binari. xxd -r non genera mai errori per parametri errati. I parametri extra sono silenziosamente ignorati. Nel modificare immagini esadecimali, si tenga conto che xxd -r salta il resto della riga, dopo aver letto i caratteri contenenti dati esadecimali (vedere opzione -c). Cio implica pure che le modifiche alle colonne di caratteri stampabili ASCII (o EBCDIC) sono sempre ignorate. La ricostruzione da un file immagine esadecimale in stile semplice (postscript) con xxd -r -p non dipende dal numero corretto di colonne. In questo caso, qualsiasi cosa assomigli a una coppia di cifre esadecimali e interpretata [e utilizzata]. Notare la differenza fra % xxd -i file e % xxd -i < file xxd -s +seek puo comportarsi in modo diverso da xxd -s seek, perche lseek(2) e usata per tornare indietro nel file di input. Il '+' fa differenza se il file di input e lo `standard input', e se la posizione nel file di `standard input' non e all'inizio del file quando xxd e eseguito, e riceve input. I seguenti esempi possono contribuire a chiarire il concetto (o ad oscurarlo!)... Riavvolge lo `standard input' prima di leggere; necessario perche `cat' ha gia letto lo stesso file fino alla fine dello `standard input'. % sh -c "cat > copia_normale; xxd -s 0 > copia_esadecimale" < file Stampa immagine esadecimale dalla posizione file 0x480 (=1024+128) in poi. Il segno `+' vuol dire "rispetto alla posizione corrente", quindi il `128' si aggiunge a 1k (1024) dove `dd' si era fermato. % sh -c "dd of=normale bs=1k count=1; xxd -s +128 > esadecimale" < file Immagine esadecimale dalla posizione 0x100 (=1024-768 ) del file in avanti. % sh -c "dd of=normale bs=1k count=1; xxd -s +-768 > esadecimale" < file Comunque, questo capita raramente, e l'uso del `+' non serve quasi mai. L'autore preferisce monitorare il comportamento di xxd con strace(1) o truss(1), quando si usa l'opzione -s. ESEMPI Stampa tutto tranne le prime tre righe (0x30 byte in esadecimale) di file. % xxd -s 0x30 file Stampa 3 righe (0x30 byte in esadecimale) alla fine di file. % xxd -s -0x30 file Stampa 120 byte come immagine esadecimale continua con 20 byte per riga. % xxd -l 120 -ps -c 20 xxd.1 2e54482058584420312022417567757374203139 39362220224d616e75616c207061676520666f72 20787864220a2e5c220a2e5c222032317374204d 617920313939360a2e5c22204d616e2070616765 20617574686f723a0a2e5c2220202020546f6e79 204e7567656e74203c746f6e79407363746e7567 Stampa i primi 120 byte della pagina di manuale xxd.1 a 12 byte per riga. % xxd -l 120 -c 12 xxd.1 0000000: 2e54 4820 5858 4420 3120 2241 .TH XXD 1 "A 000000c: 7567 7573 7420 3139 3936 2220 ugust 1996" 0000018: 224d 616e 7561 6c20 7061 6765 "Manual page 0000024: 2066 6f72 2078 7864 220a 2e5c for xxd"..\ 0000030: 220a 2e5c 2220 3231 7374 204d "..\" 21st M 000003c: 6179 2031 3939 360a 2e5c 2220 ay 1996..\" 0000048: 4d61 6e20 7061 6765 2061 7574 Man page aut 0000054: 686f 723a 0a2e 5c22 2020 2020 hor:..\" 0000060: 546f 6e79 204e 7567 656e 7420 Tony Nugent 000006c: 3c74 6f6e 7940 7363 746e 7567 output_file Modificare (patch) la data nel file xxd.1 % echo "0000037: 3574 68" | xxd -r - xxd.1 % xxd -s 0x36 -l 13 -c 13 xxd.1 0000036: 3235 7468 204d 6179 2031 3939 36 25th May 1996 Creare un file di 65537 byte tutto a 0x00, tranne l'ultimo carattere che e una 'A' (esadecimale 0x41). % echo "010000: 41" | xxd -r > file Stampa una immagine esadecimale del file di cui sopra con opzione autoskip. % xxd -a -c 12 file 0000000: 0000 0000 0000 0000 0000 0000 ............ * 000fffc: 0000 0000 40 ....A Creare un file di 1 byte che contiene il solo carattere 'A'. Il numero dopo '-r -s' viene aggiunto a quello trovato nel file; in pratica, i byte precedenti non sono stampati. % echo "010000: 41" | xxd -r -s -0x10000 > file Usare xxd come filtro all'interno di un editor come vim(1) per ottenere l'immagine esadecimale della parte di file fra i marcatori `a' e `z'. :'a,'z!xxd Usare xxd come filtro all'interno di un editor come vim(1) per ricostruire un pezzo di file binario da un'immagine esadecimale fra i marcatori `a' e `z'. :'a,'z!xxd -r Usare xxd come filtro all'interno di un editor come vim(1) per ricostruire una sola riga di file binario da un'immagine esadecimale. Portare il cursore sopra la riga e battere: !!xxd -r Leggere singoli caratteri da una linea seriale % xxd -c1 < /dev/term/b & % stty < /dev/term/b -echo -opost -isig -icanon min 1 % echo -n foo > /dev/term/b CODICI DI RITORNO Il programma puo restituire questi codici di errore: 0 nessun errore rilevato. -1 operazione non supportata (xxd -r -i non ancora possible). 1 errore durante la scansione parametri. 2 problemi con il file di input. 3 problemi con il file di output. 4,5 posizione `seek' specificata non raggiungibile all'interno del file. VEDERE ANCHE uuencode(1), uudecode(1), patch(1) AVVERTIMENTI La stranezza dello strumento rispecchia la mente del suo creatore. Usate a vostro rischio e pericolo. Copiate i file. Tracciate l'esecuzione. Diventate un mago. VERSIONE Questa pagina di manuale documenta la versione 1.7 di xxd. AUTORE (c) 1990-1997 Juergen Weigert Distribuite liberamente ed attribuitemi il credito, fate soldi e condivideteli con me perdete soldi e non venite a chiederli a me. Pagina di manuale iniziata da Tony Nugent Piccole modifiche di Bram Moolenaar. Modificato da Juergen Weigert. Pagina di manuale per xxd Agosto 1996 XXD(1)