如何创建文件或字符串的Hexdump

介绍

十六进制转储是数据的十六进制视图。 调试程序或反向工程时,您可能希望使用十六进制。

例如,许多文件格式都有特定的十六进制字符来表示它们的类型。 如果您正尝试使用程序读取文件,并且出于某种原因无法正确加载文件,则可能是该文件不是您所期望的格式。

如果你想看看一个程序是如何工作的,而且你没有反编译代码的源代码或软件,你可以看看十六进制转储,试着弄清楚发生了什么。

什么是十六进制?

电脑以二进制形式思考 每个字符,数字和符号都由二进制或多个二进制值引用。

然而,人类往往会用十进制来思考。

成千上万 数以百计 单位
1 0 1 1

作为人类,我们最低的数字称为单位,表示数字0到9.当我们达到10时,我们将单位列重置为0,并将数字1加到十列(10)。

128 64 32 16 8 4 2 1
1 0 0 1 0 0 0 1

在二进制中,最低的数字仅表示0和1.当我们超过1时,我们在2列中加1,在1列中加0。 当你想表示4时,你在4列中加1,并重置2和1的列。

因此,代表15你会有1111代表1 8,1 4,1 1和1。 (8 + 4 + 2 + 1 = 15)。

如果我们以二进制格式查看数据文件,这将是绝对巨大的,并且几乎不可能理解。

二进制的下一步是八进制,它使用8作为基数。

24 16 8 1
0 1 1 0

在八进制系统中,第一列从0到7,第二列从8到15,第三列从16到23,第四列从24到31,依此类推。 虽然一般比二进制更容易阅读,但大多数人更喜欢使用十六进制。

十六进制使用16作为基数。 现在这是它变得混乱的地方,因为作为人类,我们认为数字为0到9。

那么10,11,12,13,14,15所用的是什么? 答案是字母。

因此,值100由64表示。您需要16个列中的6个,在单位列中产生96个,然后是4个,产生100个。

文件中的所有字符将用十六进制值表示。 这些值的含义取决于文件本身的格式。 文件的格式由通常存储在文件开头的十六进制值表示。

知道文件开头出现的十六进制值序列后,可以手动计算文件的格式。以十六进制转储方式查看文件可以帮助您查找当文件为加载到普通的文本编辑器中。

如何使用Linux创建十六进制转储

要使用Linux创建十六进制转储,请使用hexdump命令。

要以十六进制形式将文件显示到终端 (标准输出),请运行以下命令:

hexdump文件名

例如

hexdump image.png

默认输出将显示行号(十六进制格式),然后每行显示8组4行十六进制值。

例如:

00000000 5089 474e 0a0d 0a1a 0000 0d00 4849 5244

您可以提供不同的开关来更改默认输出。 例如,指定减号b开关将产生一个8位偏移量,后面是16个三列,零填充,八进制格式的输入数据字节。

hexdump -b image.png

因此,上面的例子现在将被表示如下:

00000000 211 120 116 107 015 012 032 012 000 000 000 015 111 110 104 122

上述格式被称为单字节八进制显示。

查看文件的另一种方法是使用minus c开关以单字节字符显示。

hexdump -c image.png

这又显示了偏移量,但是这一次后面跟着十六个空格分隔的,三列,每行输入数据的空格填充字符。

其他选项包括可使用负C开关显示的Canonical十六进制+ ASCII显示,以及可使用负号开关显示的两字节十进制显示。 负o开关可用于显示双字节八进制显示。 最后,minux x开关可用于显示双字节十六进制显示。

hexdump -C image.png

hexdump -d image.png

hexdump -o image.png

hexdump -x image.png

如果上述格式均不符合您的需要,请使用minus e开关指定格式。

如果你知道一个数据文件很长,并且你只想看到前几个字符来确定它的类型,你可以使用-n开关来指定在十六进制中显示多少文件。

hexdump -n100 image.png

以上命令显示前100个字节。

如果你想跳过文件的一部分,你可以使用负号开关来设置从开始的偏移量。

hexdump -s10 image.png

如果您不提供文件名,则会从标准输入中读取文本。

只需输入以下命令:

hexdump都

然后将文本输入到标准输入中并通过键入quit结束。 十六进制将显示到标准输出。

概要

hexdump工具显然是一个相当强大的工具,您应该阅读手册页以充分掌握所有功能。

在阅读输出时,您还需要很好地理解您正在寻找的内容。

查看手册页,请运行以下命令:

男子hexdump