二进制文件的十六进制文本转储与反向转换

如何把一个二进制文件以十六进制打印出来呢?

我们知道在 Linux 中有一个命令 hexdump 可以将文件以十六进制输出,但是这个命令不能对已经输出的十六进制还原成原来的格式。如果想要能让 dubmp 出来的文本还原成之前的格式,可以用 xxd 这个命令来解决。

xxd 的作用可以将给定的文件或数据以十六进制形式输出,并且可以将输出的十六进制格式还原成之前的二进制格式,输出之后的内容可以“邮件安全”的ASCII码形式传输,比如你可以把一个二进制的可执行程序利用xxd 转换成十六进制,以邮件文本的形式传输,并且可以完整的还原成可执行文件。

举例说明,比如想把/usr/bin/make 文件输出十六进制:

xxd /usr/bin/make outfile

还原:

xxd -r outfile make2

如果想要转储的文件小一些可以用-p 改变输出格式:

xxd -p /usr/bin/make outfile

还原时保证相同格式即可:

xxd -p -r outfile make2

对于转储后的十六进制文件, 甚至可以进行一些修改,达到给程序打补丁的目的。当然前提条件是要知道修改的数据的具体位置。

这个命令在 mac 下也是可以用的,对于 xxd 的其它一些参数,请参见 man 手册。