hexdump 與 xxd 格式差異

hexdump 與 xxd 格式差異

我正在尋找如何進行反向十六進制轉儲並發現提到了 xxd。然而,它似乎不能簡單地工作:

xxd -r hexdumpfile > binaryfile

xxd infile然後我比較了和的輸出之間的差異hexdump infile,發現了三個差異:

  1. xxd 輸出位址後面有冒號
  2. xxd 輸出的資料位置相反(例如,5a42在 hexdump 輸出中變成425axxd 輸出)
  3. 每行後面有一些額外的字符

我的伺服器上只有某些檔案的十六進位轉儲版本。如何使用 xxd 正確取回二進位資料?

答案1

據我所知,沒有一個命令可以完成轉換,但它可以很容易地分為幾個步驟:

  1. hexdump使用從輸出中剝離地址sed
  2. 使用轉換為二進位xxd
  3. 位元組序轉換(例如,5a42變成425a)使用dd

這是完整的命令:

sed 's/^[0-9]*//' hexdump | xxd -r -p | dd conv=swab of=binaryfile

答案2

這個答案是交叉帖子https://stackoverflow.com/a/52834021/6770384

您可以透過一個命令完成轉換sed。在地址後面添加:並更改字節序(切換ab1212ab)就足夠了。

sed -E 's/ /: /;s/ (..)(..)/ \2\1/g;$d' dump | xxd -r

已知錯誤(見評論區)

  • 如果原始檔案的長度為奇數(例如,1、3、5、7、...位元組長),則會新增尾隨空位元組。
  • 如果原始文件的重複部分hexdump使用 *.

答案3

嘗試新增-p.

xxd -r -p hexdumpfile > binaryfile

答案4

你可以簡單地使用下面的東西

  1. 取得所需格式的十六進位轉儲

    hexdump -Cv <二進位檔案.bin> > 二進位檔案.txt

-C 將逐位元組列印數據

-v 不會使用 * 來表示重複的內容

  1. 現在您需要從 binary_file.txt 中每行刪除第一個和最後幾個字元。您可以在這裡使用 sed 指令。

  2. 現在使用xxd指令

    xxd -r -p 二進位檔案.txt > 恢復二進位檔案.bin

  3. 您可以檢查兩個檔案的 md5sum。它應該匹配

    md5sum 二進位檔案.bin

    md5sum 恢復二進位檔案.bin

相關內容