Contents

创建文件的十六进制转储

1. 概述

十六进制转储是文件内容的十六进制视图。在本教程中,我们将介绍可用于创建文件的十六进制转储的不同工具。

2. 设置

让我们创建一个 ASCII 格式的示例文本文件,以便在本文中使用:

$ cat >> sample.txt
This will be our sample text in the file. We will convert it to hex using different tools.

3. 使用hexdump

**hexdump 是一个内置的 Linux 实用程序,用于过滤和显示十六进制、十进制、八进制或 ASCII 格式的不同文件的内容。**它作为检查工具的功能很好,可用于数据恢复

我们也可以用它来查看不同程序的可执行代码。

hexdump具有以下基本语法:

$ hd [OPTIONS...] [FILES...]

使用我们上面创建的sample.txt文件,让我们创建一个十六进制转储:

$ hexdump sample.txt
0000000 6854 7369 7720 6c69 206c 6562 6f20 7275
0000010 7320 6d61 6c70 2065 6574 7478 6920 206e
0000020 6874 2065 6966 656c 202c 6577 7720 6c69
..truncated

默认情况下,hexdump命令以 16 位值输出十六进制数据。我们可以使用*-canonical*标志来显示十六进制和 ASCII 数据:

$ hexdump -C sample.txt
00000000  54 68 69 73 20 77 69 6c  6c 20 62 65 20 6f 75 72  |This will be our|
00000010  20 73 61 6d 70 6c 65 20  74 65 78 74 20 69 6e 20  | sample text in |
00000020  74 68 65 20 66 69 6c 65  2c 20 77 65 20 77 69 6c  |the file, we wil|
...truncated

或者,我们可以使用同时显示十六进制和 ASCII 数据的快捷方式hd命令:

$ hd sample.txt

默认情况下,结果只打印到终端。我们可以使用“ *>”*运算符将输出重定向到不同的文件:

$ hd sample.txt > hex_dump_info

4. 使用xxd

我们可以使用xxd 创建文件的十六进制转储。我们还可以使用它将十六进制转储转换回其原始 ASCII 或二进制格式。

xxd具有以下语法:

$ xxd [OPTIONS...] [FILES...]

让我们创建sample.txt文件的十六进制转储:

$ xxd sample.txt
00000000: 5468 6973 2077 696c 6c20 6265 206f 7572  This will be our
00000010: 2073 616d 706c 6520 7465 7874 2069 6e20   sample text in 
00000020: 7468 6520 6669 6c65 2c20 7765 2077 696c  the file, we wil
...truncated

默认情况下,xxd输出三列。它们分别代表文件偏移量、十六进制数据和文本或 ASCII 数据。

结果仅打印到终端。我们可以使用*“>”*运算符将更改保存到特定文件:

$ xxd sample.txt > hex_dump_file

要将十六进制转储转换回其原始二进制格式,我们使用*-revert (-r)*标志:

$ xxd -r hex_dump_file

5. 使用od

** od 或八进制转储是用于将文件转换为不同格式的内置命令。**默认格式是八进制。od通过按照我们列出的顺序组合每个文件中的数据来接收多个文件作为输入。

我们可以使用此命令将可执行文件转换为对调试有用的人类可读格式。

od具有以下语法:

$ od [OPTION]... [FILE]...

默认情况下,od命令以八进制格式显示数据。因此,我们将使用*-t x1*标志将输出转换为十六进制格式:

$ od -t x1 sample.txt
0000000 54 68 69 73 20 77 69 6c 6c 20 62 65 20 6f 75 72
0000020 20 73 61 6d 70 6c 65 20 74 65 78 74 20 69 6e 20
0000040 74 68 65 20 66 69 6c 65 2c 20 77 65 20 77 69 6c
...truncated

我们还可以结合*-t x1标志和-c*标志来显示每个字符及其十六进制值:

$ od -t x1 -c sample.txt
0000000  54  68  69  73  20  77  69  6c  6c  20  62  65  20  6f  75  72
          T   h   i   s       w   i   l   l       b   e       o   u   r
0000020  20  73  61  6d  70  6c  65  20  74  65  78  74  20  69  6e  20
              s   a   m   p   l   e       t   e   x   t       i   n    
0000040  74  68  65  20  66  69  6c  65  2c  20  77  65  20  77  69  6c
          t   h   e       f   i   l   e   ,       w   e       w   i   l
...truncated

如果我们需要保存输出,而不仅仅是在终端上打印,我们可以使用*“>”*运算符并指定一个文件名:

$ od -x sample.txt > hex_dump_file

6. 使用hexcurse

**hexcurse 是一个基于 ncurses 的十六进制编辑器,它在标准拆分视图中显示十六进制数据和可读文本 (ASCII)。**我们也可以用它来编辑我们的文件。

它在所有主要的 Linux 发行版中都可用,尽管它没有预先安装。我们可以使用包管理器安装它:

$ sudo apt install hexcurse

接下来,我们打开我们的sample.txt文件:

$ hexcurse sample.txt

hexcurse有许多键盘快捷键 ,包括ctrl+s来保存我们所做的任何更改。

如果我们需要将更改保存到不同的文件,我们可以使用*outfile(-o)*标志:

$ hexcurse sample.txt -o hex_dump_file

这将使用我们的sample.txt文件中的数据打开hexcurse 。然后,我们可以将更改保存到hex_dump_file

7. 使用hexyl

hexyl 是一个简单的十六进制查看器程序,它在输出中使用颜色来区分不同类型的字节:ASCII、空白、非 ASCII 等。

由于它没有预先安装,让我们使用包管理器安装它:

$ sudo apt install hexyl

现在我们可以查看sample.txt文件的十六进制转储:

$ hexyl sample.txt

8. 使用vim编辑器

**vim 是用于高效文本编辑的最先进和高度可定制的文本编辑器之一。**它是由 Bram Moolenaar 开发的。

我们还可以将vim与几乎任何文件格式一起使用。它有一些方便的内置命令来获取文件的十六进制转储。

首先,让我们安装编辑器:

$ sudo apt-get install vim

接下来,我们用vim打开我们的sample.txt文件:

$ vim sample.txt

现在,我们在vim 的终端上运行这个命令来将我们的文本转换为十六进制格式:

:%!hexdump -C

这将产生以下输出:

00000000  54 68 69 73 20 77 69 6c  6c 20 62 65 20 6f 75 72  |This will be our|
00000010  20 73 61 6d 70 6c 65 20  74 65 78 74 20 69 6e 20  | sample text in |
00000020  74 68 65 20 66 69 6c 65  2c 20 77 65 20 77 69 6c  |the file, we wil|
...truncated

9. 使用ghex

GNOME Hex Editor 是一个简单的编辑器,用于查看、编辑文件并将其转换为其他格式,包括 hex 或 ASCII。

显示分为两列,一列是十六进制值,另一列是 ASCII 表示。

我们可以 使用包管理器下载并安装  GNOME Hex Editor

$ sudo apt install ghex

现在,我们可以查看我们的文件:

$ ghex sample.txt

/uploads/create_hex_dump/1.png

这为我们提供了sample.txt文件的良好图形表示,分为三列,分别表示文件偏移、十六进制数据及其 ASCII 表示。

我们可以使用箭头键浏览十六进制值并对其进行编辑。