我搜索了如何进行反向十六进制转储,发现提到了 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