
我正在尋找如何進行反向十六進制轉儲並發現提到了 xxd。然而,它似乎不能簡單地工作:
xxd -r hexdumpfile > binaryfile
xxd infile
然後我比較了和的輸出之間的差異hexdump infile
,發現了三個差異:
- xxd 輸出位址後面有冒號
- xxd 輸出的資料位置相反(例如,
5a42
在 hexdump 輸出中變成425a
xxd 輸出) - 每行後面有一些額外的字符
我的伺服器上只有某些檔案的十六進位轉儲版本。如何使用 xxd 正確取回二進位資料?
答案1
據我所知,沒有一個命令可以完成轉換,但它可以很容易地分為幾個步驟:
hexdump
使用從輸出中剝離地址sed
- 使用轉換為二進位
xxd
- 位元組序轉換(例如,
5a42
變成425a
)使用dd
這是完整的命令:
sed 's/^[0-9]*//' hexdump | xxd -r -p | dd conv=swab of=binaryfile
答案2
這個答案是交叉帖子https://stackoverflow.com/a/52834021/6770384
您可以透過一個命令完成轉換sed
。在地址後面添加:
並更改字節序(切換ab12
到12ab
)就足夠了。
sed -E 's/ /: /;s/ (..)(..)/ \2\1/g;$d' dump | xxd -r
已知錯誤(見評論區)
- 如果原始檔案的長度為奇數(例如,1、3、5、7、...位元組長),則會新增尾隨空位元組。
- 如果原始文件的重複部分
hexdump
使用*
.
答案3
嘗試新增-p
.
xxd -r -p hexdumpfile > binaryfile
答案4
你可以簡單地使用下面的東西
取得所需格式的十六進位轉儲
hexdump -Cv <二進位檔案.bin> > 二進位檔案.txt
-C 將逐位元組列印數據
-v 不會使用 * 來表示重複的內容
現在您需要從 binary_file.txt 中每行刪除第一個和最後幾個字元。您可以在這裡使用 sed 指令。
現在使用xxd指令
xxd -r -p 二進位檔案.txt > 恢復二進位檔案.bin
您可以檢查兩個檔案的 md5sum。它應該匹配
md5sum 二進位檔案.bin
md5sum 恢復二進位檔案.bin