跳至內容

十六進制轉儲

維基百科,自由的百科全書
一個318字節的維基百科圖標的十六進制轉儲

在電腦運算領域,十六進制轉儲(英文:Hex dump)是指從內存或其他存儲設備中調取的數據的十六進制視圖(該視圖被打印在屏幕上或者紙上)。在調試軟件及進行反向工程時,操作者經常需要查閱十六進制轉儲。


在十六進制轉儲中,每個字節被兩位十六進制數字代表。十六進制轉儲在顯示時通常被排列成8或16字節的列,有時用空格隔開。一些十六進制轉儲工具在行首提供十六進制的內存地址,有些則在行尾提供檢驗值。

雖然十六進制轉儲的名稱中包含「十六進制」,但是一些十六進制轉儲軟件也提供八進制或者十進制的輸出選項。常用的十六進制轉儲工具包括 hexdump、od、xxd,有時這些軟件也會被簡單地命名為 dump 或者 D。

例子[編輯]

一個程序十六進制轉儲的一部分(用 Unix 的 hexdump 工具生成):

 00105e0 e6b0 343b 9c74 0804 e7bc 0804 e7d5 0804
 00105f0 e7e4 0804 e6b0 0804 e7f0 0804 e7ff 0804
 0010600 e80b 0804 e81a 0804 e6b0 0804 e6b0 0804

上面的列子展示了十六進制轉儲的一種形式。但是十六進制轉儲不僅局限於如上形式,其字節序可以不同。以下的形式則僅在特定情形下使用:

 00105e0 e6 b008 04e79e08 04e7bc 08 04 e7 d50804

當必需明確字節的順序時(如查閱進行機器語言程序或者 ROM時),則更傾向於逐字節地列出,每16字節一行,並可能用分隔符分成兩個8字節的組:

 00105e0 e6 b0 08 04 e7 9e 08 04-e7 bc 08 04 e7 d5 08 04
 00105f0 e7 e4 08 04 e6 b0 08 04-e7 f0 08 04 e7 ff 08 04
 0010600 e8 0b 08 04 e8 1a 08 04-e6 b0 08 04 e6 b0 08 04

在一些情況下,也會用不在值之間留空白的形式表示:

 00105e0 e6b00804e79e0804e7bc0804e7d50804
 00105f0 e7e40804e6b00804e7f00804e7ff0804
 0010600 e80b0804e81a0804e6b00804e6b00804

Unix默認將兩個字節並作一組顯示。以下是在現代化的x86(小端序)計算機上通常的現實情況:

 00105e0 b0e6 0408 9ee7 0408 bce7 0408 d5e7 0408
 00105f0 e4e7 0408 b0e6 0408 f0e7 0408 ffe7 0408
 0010600 0be8 0408 1ae8 0408 b0e6 0408 b0e6 0408

通常,也會有額外的一列表顯示出十六進制數字代表的ASCII碼(例如 hexdump -Chd):

0000: 57 69 6B 69 70 65 64 69 61 2C 20 74 68 65 20 66  Wikipedia, the f
0010: 72 65 65 20 65 6E 63 79 63 6C 6F 70 65 64 69 61  ree encyclopedia
0020: 20 74 68 61 74 20 61 6E 79 6F 6E 65 20 63 61 6E   that anyone can
0030: 20 65 64 69 74 00 00 00 00 00 00 00 00 00 00 00   edit...........

校驗和[編輯]

當十六進制轉儲需要手動輸入時,便會在每一行的末尾提供一位或兩位校驗和,一般用256本行中所有數字之和,或者使用 CRC 值。這個校驗和將用於確定用戶的輸入正確與否。

壓縮的重複行[編輯]

在Unix程序 odhexdump 中,並非所有行都會被列出。包含與上一行相同的內容的行將被略去,取而代之的是一個星號。例如,一塊全是零的信息打印如下:

 0000000 0000 0000 0000 0000 0000 0000 0000 0000
 *
 0000030

這個特性可以使我們很方便地檢測的大文件或存儲設備的不規則情況。在現代 Linux 系統中,使用以下命令可以方便地掃描整個硬盤,以檢查是否完全為空:

 # hexdump /dev/sda #(用需要扫描的设备的路径代替/dev/sda)

-v 選項使 hexdump 和 od 顯示所有輸入的數據:

 0000000 0000 0000 0000 0000 0000 0000 0000 0000
 0000010 0000 0000 0000 0000 0000 0000 0000 0000
 0000020 0000 0000 0000 0000 0000 0000 0000 0000

參考資料[編輯]

外部連結[編輯]