天天看點

hexdump使用小技巧

本文乃fireaxe原創,使用GPL釋出,可以自由拷貝,轉載。但轉載請保持文檔的完整性,并注明原作者及原連結。内容可任意使用,但對因使用該内容引起的後果不做任何保證。

作者:[email protected]

部落格:fireaxe.blog.chinaunix.net

開發時經常會需檢視非文本檔案内容,最常見的16進制檢視器就是hexdump。hexdump 看似簡單,但還是有些小技巧的。

以文本檔案tmpfile為例:

點選(此處)折疊或打開

Happy New Year!

1)  最簡單的方式

hexdump testfile

0000000 6148 7070 2079 654e 2077 6559 7261 0a21

*

0000030

這種方式是以兩個位元組為一組,其順序取決于本機位元組序。比如在x86架構上就是以blittle-endian方式顯示,看起來會很費勁。

如第一行翻譯成ascii碼:

6148 7070 2079 654e 2077 6559 7261 0a21

aH     pp      y     Ne      w     e      ae     !r

為了避免這種情況,就要用到下面的”以位元組方式檢視“

2)  以位元組方式檢視

hexdump -C testfile -s skip -n number

00000000  48 61 70 70 79 20 4e 65  77 20 59 65 61 72 21 0a  |Happy New Year!.|

這種方式就不會有位元組序問題了,而且還能同時顯示16進制與ascii碼,但存在的問題是,如果某幾行的内容相同,會省略掉後幾行,這個有時也會造成麻煩。如何避免省略呢?

3) 不要省略

hexdump -v testfile

0000010 6148 7070 2079 654e 2077 6559 7261 0a21

0000020 6148 7070 2079 654e 2077 6559 7261 0a21

現在省略是沒有了,但又回到了兩位元組顯示的老路上,是以我們要把兩種方式結合起來。

4) 位元組方式顯示且不要省略

hexdump -Cv testfile

00000010  48 61 70 70 79 20 4e 65  77 20 59 65 61 72 21 0a  |Happy New Year!.|

00000020  48 61 70 70 79 20 4e 65  77 20 59 65 61 72 21 0a  |Happy New Year!.|

現在就好看多了,既是以單位元組方式顯示,又不會省略了。但有時檔案很大,我們隻想檢視其中一段,怎麼把呢?

5) 顯示某一段

hexdump -Cv testfile -s skip -n number

fireaxe $ hexdump -Cv tmp.txt -n 1

00000000  48                                                |H|

00000001

fireaxe $ hexdump -Cv tmp.txt -n 2

00000000  48 61                                             |Ha|

00000002

fireaxe $ hexdump -Cv tmp.txt -n 3

00000000  48 61 70                                          |Hap|

00000003

fireaxe $ hexdump -Cv tmp.txt -s 1 -n 1

00000001  61                                                |a|

fireaxe $ hexdump -Cv tmp.txt -s 2 -n 1

00000002  70                                                |p|

fireaxe $ hexdump-Cv tmp.txt -s 3 -n 1

00000003  70                                                |p|

00000004

OK, 整個顯示過程都可以自由控制了~~

繼續閱讀