GNU/Linux >> Linux Esercitazione >  >> Linux

Comando inverso Hexdump

Ho scritto un breve script AWK che inverte hexdump -C restituire i dati originali. Utilizzare in questo modo:

reverse-hexdump.sh hex.txt > data

Gestisce i marcatori di ripetizione '*' e genera dati originali anche se binari.hexdump -C e reverse-hexdump.sh creare una coppia di dati andata e ritorno. È disponibile qui:

  • Repo GitHub reverse-hexdump
  • Diretto a reverse-hexdump.sh

Ripristina file , dato solo l'output di hexdump file

Se hai solo l'output di hexdump file e desideri ripristinare il file originale, per prima cosa nota che l'output predefinito di hexdump dipende dall'endianness del sistema su cui hai eseguito hexdump!

Se hai accesso al sistema che ha creato il dump, puoi determinarne l'endianità usando il seguente comando:

[[ "$(printf '\01\03' | hexdump)" == *0103* ]] && echo big || echo little

Inversione dell'hexdump little-endian

Questo è il caso più comune. Tutti i sistemi x86/x64 sono little-endian. Se non conosci l'endianness del sistema che ha eseguito hexdump file , prova questo.

sed 's/ \(..\)\(..\)/ \2\1/g;$d' dump | xxd -r

Il sed parte converte hexdump in xxd , almeno fino a quel momento xxd -r funziona.

Inversione dell'hexdump big-endian

sed '$d' dump | xxd -r

Bug noti (vedi sezione commenti)

  • Un byte nullo finale viene aggiunto se il file originale era di lunghezza dispari (ad es. 1, 3, 5, 7, ..., lungo byte).
  • Le sezioni ripetute del file originale non vengono ripristinate correttamente se erano hexdump ed utilizzando un * .

Puoi controllare il tuo dump per i casi problematici di cui sopra eseguendo il comando seguente:

grep -qE '^\*|^[0-9a-f]*[13579bdf] *$' dump && echo bug || echo ok

Migliore alternativa per creare dump esadecimali in primo luogo

Oltre al non-posix (e quindi non così portatile) xxd c'è od (o ctal d ump) che dovrebbe essere disponibile su tutti i sistemi unix-like come specificato da posix:

od -tx1 -An -v

Stamperà una x esadecimale dump adecimale, raggruppamento di cifre come singoli byte (-tx1 ), con n o A prefissi di indirizzo (-An , simile a xxd -p ) e senza abbreviare le sezioni ripetute come * (-v ). Puoi invertire tale dump usando xxd -r -p .


Esiste uno strumento simile chiamato xxd . Se esegui xxd con solo un nome di file scarica i dati in un formato di dump esadecimale abbastanza standard:

# xxd bdata
0000000: 0001 0203 0405
......

Ora se reinvii l'output a xxd con -r opzione e reindirizzarlo a un nuovo file, puoi riconvertire il dump esadecimale in binario:

# xxd bdata | xxd -r >bdata2
# cmp bdata bdata2
# xxd bdata2
0000000: 0001 0203 0405

Linux
  1. Come funziona Hexdump

  2. Comando Linux mv

  3. Linux du comando

  4. Comando xxd – Espresso in forma esadecimale

  5. Qual è l'utilità della riga di comando del DNS inverso?

Comando di sorveglianza di Linux

Comando Xargs in Linux

Comando W in Linux

Al comando in Linux

Tutorial sui comandi Linux xxd per principianti (con esempi)

comando ifconfig