hexdump 与 xxd 格式的区别

hexdump 与 xxd 格式的区别

我搜索了如何进行反向十六进制转储,发现提到了 xxd。但是,它似乎无法简单地工作:

xxd -r hexdumpfile > binaryfile

xxd infile然后,我比较了和输出之间的差异hexdump infile,发现了三个差异:

  1. xxd 输出的地址后面有一个冒号
  2. xxd 输出的数据位置已反转(例如,5a42在 hexdump 输出中变为425a在 xxd 输出中)
  3. 每行后面都有一些额外的字符

我在服务器上只有某些文件的十六进制转储版本。如何使用 xxd 正确恢复二进制数据?

答案1

据我所知,没有一个命令可以执行转换,但它可以很容易地分为几个步骤:

  1. hexdump使用以下方法从输出中删除地址sed
  2. 使用转换为二进制xxd
  3. 使用以下方法进行字节序转换(例如5a42变为425add

以下是完整命令:

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

相关内容