如何創建文件或字符串的Hexdump

介紹

十六進制轉儲是數據的十六進制視圖。 調試程序或反向工程時,您可能希望使用十六進制。

例如,許多文件格式都有特定的十六進製字符來表示它們的類型。 如果您正嘗試使用程序讀取文件,並且出於某種原因無法正確加載文件,則可能是該文件不是您所期望的格式。

如果你想看看一個程序是如何工作的,而且你沒有反編譯代碼的源代碼或軟件,你可以看看十六進制轉儲,試著弄清楚發生了什麼。

什麼是十六進制?

電腦以二進制形式思考 每個字符,數字和符號都由二進製或多個二進制值引用。

然而,人類往往會用十進制來思考。

成千上萬 數以百計 單位
1 0 1 1

作為人類,我們最低的數字稱為單位,表示數字0到9.當我們達到10時,我們將單位列重置為0,並將數字1加到十列(10)。

128 64 32 16 8 4 2 1
1 0 0 1 0 0 0 1

在二進制中,最低的數字僅表示0和1.當我們超過1時,我們在2列中加1,在1列中加0。 當你想表示4時,你在4列中加1,並重置2和1的列。

因此,代表15你會有1111代表1 8,1 4,1 1和1。 (8 + 4 + 2 + 1 = 15)。

如果我們以二進制格式查看數據文件,這將是絕對巨大的,並且幾乎不可能理解。

二進制的下一步是八進制,它使用8作為基數。

24 16 8 1
0 1 1 0

在八進制系統中,第一列從0到7,第二列從8到15,第三列從16到23,第四列從24到31,依此類推。 雖然一般比二進制更容易閱讀,但大多數人更喜歡使用十六進制。

十六進制使用16作為基數。 現在這是它變得混亂的地方,因為作為人類,我們認為數字為0到9。

那麼10,11,12,13,14,15所用的是什麼? 答案是字母。

因此,值100由64表示。您需要16個列中的6個,在單位列中產生96個,然後是4個,產生100個。

文件中的所有字符將用十六進制值表示。 這些值的含義取決於文件​​本身的格式。 文件的格式由通常存儲在文件開頭的十六進制值表示。

知道文件開頭出現的十六進制值序列後,可以手動計算文件的格式。以十六進制轉儲方式查看文件可以幫助您查找當文件為加載到普通的文本編輯器中。

如何使用Linux創建十六進制轉儲

要使用Linux創建十六進制轉儲,請使用hexdump命令。

要以十六進制形式將文件顯示到終端 (標準輸出),請運行以下命令:

hexdump文件名

例如

hexdump image.png

默認輸出將顯示行號(十六進制格式),然後每行顯示8組4行十六進制值。

例如:

00000000 5089 474e 0a0d 0a1a 0000 0d00 4849 5244

您可以提供不同的開關來更改默認輸出。 例如,指定減號b開關將產生一個8位偏移量,後面是16個三列,零填充,八進制格式的輸入數據字節。

hexdump -b image.png

因此,上面的例子現在將被表示如下:

00000000 211 120 116 107 015 012 032 012 000 000 000 015 111 110 104 122

上述格式被稱為單字節八進制顯示。

查看文件的另一種方法是使用minus c開關以單字節字符顯示。

hexdump -c image.png

這又顯示了偏移量,但是這一次後面跟著十六個空格分隔的,三列,每行輸入數據的空格填充字符。

其他選項包括可使用負C開關顯示的Canonical十六進制+ ASCII顯示,以及可使用負號開關顯示的兩字節十進制顯示。 負o開關可用於顯示雙字節八進制顯示。 最後,minux x開關可用於顯示雙字節十六進制顯示。

hexdump -C image.png

hexdump -d image.png

hexdump -o image.png

hexdump -x image.png

如果上述格式均不符合您的需要,請使用minus e開關指定格式。

如果你知道一個數據文件很長,並且你只想看到前幾個字符來確定它的類型,你可以使用-n開關來指定在十六進制中顯示多少文件。

hexdump -n100 image.png

以上命令顯示前100個字節。

如果你想跳過文件的一部分,你可以使用負號開關來設置從開始的偏移量。

hexdump -s10 image.png

如果您不提供文件名,則會從標準輸入中讀取文本。

只需輸入以下命令:

hexdump都

然後將文本輸入到標準輸入中並通過鍵入quit結束。 十六進制將顯示到標準輸出。

概要

hexdump工具顯然是一個相當強大的工具,您應該閱讀手冊頁以充分掌握所有功能。

在閱讀輸出時,您還需要很好地理解您正在尋找的內容。

查看手冊頁,請運行以下命令:

男子hexdump