十六進制轉儲

十六進制轉儲

在計算中,十六進制轉儲是計算機數據的十六進制視圖(在螢幕或紙上),來自RAM或來自檔案或存儲設備。 查看十六進制數據轉儲通常是作為調試或逆向工程的一部分完成的。在十六進制轉儲中,每個位元組(8位)表示為兩位十六進制數。 十六進制轉儲通常被組織成8或16位元組的行,有時由空格分隔。 一些十六進制轉儲在開頭具有十六進制存儲器地址和/或在每一行的末尾具有校驗和位元組。雖然名稱暗示使用base-16輸出,但某些十六進制轉儲軟體可能具有base-8(八進制)或base-10(十進制)輸出的選項。 這個程式函式的一些常用名稱是hexdump,od,xxd和簡單轉儲甚至是D.

基本介紹

  • 中文名:十六進制轉儲
  • 外文名:Hex dump
  • 作用:一種存儲形式
樣例,校驗,壓縮重複的行,od和hexdump,DUMP和DDT和DEBUG,

樣例

程式的部分十六進制轉儲示例,由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
在現代x86(小端)計算機上,Unix默認顯示與兩位元組字相同的位元組通常如下所示:
 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 -C或hd):
0000: 57 69 6B 69 70 65 64 69 61 2C 20 74 68 65 20 66  Wikipedia, the f0010: 72 65 65 20 65 6E 63 79 63 6C 6F 70 65 64 69 61  ree encyclopedia0020: 20 74 68 61 74 20 61 6E 79 6F 6E 65 20 63 61 6E   that anyone can0030: 20 65 64 69 74 00 00 00 00 00 00 00 00 00 00 00   edit...........

校驗

當十六進制轉儲打算手動輸入計算機時,例如家用計算機時代的列印雜誌文章的情況,每行末尾將添加校驗和位元組(或兩個),通常計算為簡單的256模數 行中所有值的總和或更複雜的CRC。 此校驗和將用於確定用戶是否正確輸入行。
各種十六進制轉儲檔案格式(包括S-record,Intel HEX和Tektronix擴展HEX)在每行末尾都有類似的校驗和值。1872590

壓縮重複的行

在Unix程式od和hexdump中,並未顯示包含與前一行相同數據的所有顯示輸出行; 相反,顯示只包含一個星號的行。 例如,一個全零的塊列印為:
 0000000 0000 0000 0000 0000 0000 0000 0000 0000 * 0000030
此壓縮功能為檢查大型檔案或完整設備的不規則性提供了有用的工具。 在現代Linux系統中,掃描整個硬碟以檢查它是否全部為空是很方便的:
 # hexdump /dev/sda (replace sda with the proper name for the device to be scanned)
-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

od和hexdump

在Unix/POSIX/GNU系統上:“實用程式od和hexdump從檔案或流輸出八進制,十六進制或其他編碼的位元組。根據您的系統類型,這兩個實用程式中的任何一個或兩個都可用 - BSD系統棄用 對於hexdump,GNU系統反過來。但是,兩個實用程式具有完全相同的目的,只是略有不同的開關。

DUMP和DDT和DEBUG

在早期個人計算機上使用的CP/M 8位作業系統中,標準DUMP程式將列出每行16位元組的檔案,行的開頭是十六進制偏移量,最後是每個位元組的ASCII等效值。超出標準可列印ASCII字元範圍(20到7E)的位元組將顯示為可視對齊的單個周期。在標準CP/M調試器DDT中調用D命令時,使用相同的格式顯示記憶體。後來的格式化身(例如在DOS調試器DEBUG中)將第8個位元組和第9個位元組之間的空格更改為破折號而不改變整體寬度。
此表示法已保留在直接或間接源自CP/M的作業系統中,包括DR-DOS,MS-DOS,OS/2和MS-Windows。在Linux系統上,命令hexcat也會生成這種經典輸出格式。設計這種格式的主要原因是它適合標準80字元寬螢幕或印表機上的最大數據量,同時仍然非常容易閱讀和瀏覽。
1234:0000: 57 69 6B 69 70 65 64 69 61 2C 20 74 68 65 20 66  Wikipedia, the f1234:0010: 72 65 65 20 65 6E 63 79 63 6C 6F 70 65 64 69 61  ree encyclopedia1234:0020: 20 74 68 61 74 20 61 6E 79 6F 6E 65 20 63 61 6E   that anyone can1234:0030: 20 65 64 69 74 00 00 00 00 00 00 00 00 00 00 00   edit...........

相關詞條

熱門詞條

聯絡我們