introduzione
Un dump esadecimale è una visualizzazione esadecimale dei dati. È possibile utilizzare l'esadecimale durante il debug di un programma o per decodificare un programma.
Ad esempio, molti formati di file hanno caratteri esadecimali specifici per denotare il loro tipo. Se stai cercando di leggere un file utilizzando un programma e per qualche motivo non si carica correttamente, è possibile che il file non sia nel formato che ti aspetti.
Se vuoi vedere come funziona un programma e non hai il codice sorgente o il software che esegue il reverse engineering del codice, puoi guardare il dump esadecimale per cercare di capire cosa sta succedendo.
Cos'è esadecimale?
I computer pensano in binario. Ogni carattere, numero e simbolo è referenziato da un valore binario o da più valori binari.
Gli esseri umani, tuttavia, tendono a pensare in decimali.
migliaia | centinaia | decine | unità |
1 | 0 | 1 | 1 |
Come umani, i nostri numeri più bassi sono chiamati unità e rappresentano i numeri da 0 a 9. Quando arriviamo a 10 riportiamo la colonna delle unità su 0 e aggiungiamo 1 alla colonna delle decine (10).
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 |
In binario, il numero più basso rappresenta solo 0 e 1. Quando superiamo 1, inseriamo 1 nella colonna 2 e 0 nella colonna 1. Quando vuoi rappresentare 4, inserisci un 1 nella colonna 4 e reimposta la colonna 2 e 1.
Quindi per rappresentare 15 avresti 1111 che significa 1 otto, 1 quattro, 1 due e 1 uno. (8 + 4 + 2 + 1 = 15).
Se vedessimo un file di dati in formato binario, sarebbe assolutamente enorme e praticamente impossibile dare un senso.
Il prossimo passo da binario è ottale, che usa 8 come numero base.
24 | 16 | 8 | 1 |
0 | 1 | 1 | 0 |
In un sistema ottale la prima colonna va da 0 a 7, la seconda colonna è da 8 a 15, la terza colonna da 16 a 23 e la quarta colonna da 24 a 31 e così via. Mentre generalmente più facile da leggere rispetto a quella binaria, la maggior parte delle persone preferisce usare l'esadecimale.
Esadecimale usa 16 come numero base. Ora è qui che si confonde perché come esseri umani pensiamo ai numeri da 0 a 9.
Quindi cosa viene usato per 10, 11, 12, 13, 14, 15? La risposta è lettere.
- 0 = 0
- 1 = 1
- 2 = 2
- 3 = 3
- 4 = 4
- 5 = 5
- 6 = 6
- 7 = 7
- 8 = 8
- 9 = 9
- 10 = A
- 11 = B
- 12 = C
- 13 = D
- 14 = E
- 15 = F
Il valore 100 è quindi rappresentato da 64. Avrete bisogno di 6 della colonna 16s che richiama 96 e poi 4 nella colonna units facendo 100.
Tutti i caratteri in un file saranno indicati con un valore esadecimale. Ciò che questi valori significano dipende dal formato del file stesso. Il formato del file è denotato da valori esadecimali che di solito sono memorizzati all'inizio del file.
Conoscenza della sequenza di valori esadecimali visualizzati all'inizio dei file, è possibile determinare manualmente il formato del file. La visualizzazione di un file in un dump esadecimale può aiutare a trovare caratteri nascosti che non vengono visualizzati quando il file è caricato in un normale editor di testo.
Come creare un dump esadecimale usando Linux
Per creare un dump esadecimale usando Linux usa il comando hexdump.
Per visualizzare un file come esadecimale al terminale (output standard), eseguire il seguente comando:
nomefile esadump
Per esempio
hexdump image.png
L'output di default visualizzerà il numero di riga (in formato esadecimale) e quindi 8 set di 4 valori esadecimali per riga.
Per esempio:
00000000 5089 474e 0a0d 0a1a 0000 0d00 4849 5244
È possibile fornire diversi interruttori per modificare l'output predefinito. Ad esempio, specificando lo switch minus b si otterrà un offset di 8 cifre seguito da 16 tre colonne, zero riempite, byte di dati di input in formato ottale.
hexdump -b image.png
Pertanto l'esempio sopra sarà ora rappresentato come segue:
00000000 211 120 116 107 015 012 032 012 000 000 000 015 111 110 104 122
Il formato sopra è noto come display ottale a un byte.
Un altro modo per visualizzare il file è nella visualizzazione dei caratteri a un byte utilizzando l'interruttore minus c.
hexdump -c image.png
Questo mostra di nuovo l'offset, ma questa volta è seguito da sedici caratteri separati da spazio, tre colonne, pieni di spazio per i dati di input per riga.
Altre opzioni includono il display hexical di Canonical + ascii che può essere visualizzato utilizzando l'interruttore meno C e la visualizzazione decimale a due byte che può essere visualizzata utilizzando l'interruttore meno d. L'interruttore minus può essere utilizzato per visualizzare la visualizzazione ottale a due byte. Infine, l'interruttore minux x può essere utilizzato per visualizzare la visualizzazione esadecimale a due byte.
hexdump -C image.png
hexdump -d image.png
hexdump -o image.png
hexdump -x image.png
Se nessuno dei formati sopra indicati soddisfa le tue esigenze, usa il pulsante meno e per specificare il formato.
Se sai che un file di dati è molto lungo e vuoi solo vedere i primi caratteri per determinarne il tipo, puoi usare l'opzione -n per specificare la quantità di file da visualizzare in esadecimale.
hexdump -n100 image.png
Il comando precedente mostra i primi cento byte.
Se si desidera saltare una parte del file, è possibile utilizzare l'interruttore minus s per impostare un offset da cui iniziare.
hexdump -s10 image.png
Se non si fornisce un nome file, il testo viene letto dallo standard input.
Basta inserire il seguente comando:
hexdump
Quindi inserisci il testo nello standard input e finisci digitando quit. L'esadecimale verrà visualizzato sullo standard output.
Sommario
L'utilità hexdump è ovviamente uno strumento abbastanza potente e dovresti assolutamente leggere la pagina man per sfruttare appieno tutte le funzionalità.
Avresti anche bisogno di una buona comprensione di ciò che stai cercando quando leggi l'output.
Per visualizzare la pagina del manuale, eseguire il seguente comando:
uomo hexdump