如何获取文件的“原始二进制转储”?

如何获取文件的“原始二进制转储”?

我在一个问题中了解到了这一点 -.el8 文件到底是什么?我很好奇@slhck 如何确定有问题的文件指向软件 - eLecta

答案1

我猜:

最有可能的是,“原始二进制转储”实际上意味着十六进制转储 - 以十六进制数显示文件中每个字节的列表,而不是(或除了)字节本身。

它通常看起来像这样:

...
00000a0: 6d65 3233 3a6d 6564 6961 7769 6b69 2d31  me23:mediawiki-1
00000b0: 2e31 352e 312e 7461 722e 677a 3132 3a70  .15.1.tar.gz12:p
00000c0: 6965 6365 206c 656e 6774 6869 3332 3736  iece lengthi3276
00000d0: 3865 363a 7069 6563 6573 3636 3230 3ae9  8e6:pieces6620:.
00000e0: b08a 7ef8 00f8 d8b4 a53e 15e3 6bd6 e2c4  ..~......>..k...
00000f0: a7e4 1aa6 c67f 7106 cd3e 1672 decc b5c7  ......q..>.r....
0000100: 455c a86d 4751 379a f59f 3665 1e8c 128a  E\.mGQ7...6e....
0000110: dec4 e670 ca0f e960 353b 48fe 3dfb c455  ...p...`5;H.=..U
0000120: f940 e102 13d6 8385 1655 4642 3e83 060b  [email protected]>...
0000130: 585f d353 2ef2 07ff d9e3 aeb6 7329 2192  X_.S........s)!.
0000140: e0a9 7d75 390f 3c16 def6 d806 469e af64  ..}u9.<.....F..d
...

其中每行都有一个起始位置、16 个十六进制字节,以及相同的 16 个“安全”字节(即直接显示 0x20 到 0x7f 之间的字节,其余部分用.'s 替换)。

在 Linux 上,可以使用xxdhdhexdump -C或 的各种咒语od。在 Windows 上,有许多二进制编辑器,例如hiew或 HxD。

答案2

该文件只是在文本编辑器中打开。在本例中,可能是指向Vim。显示常规 ASCII 字符。不可打印的字符由符号替换^@

这样做的目的是看看文件是否有任何神奇数字在其中。在本例中,文件没有任何内容,但它包含录制的临时目录的路径。我们很幸运,因为路径中包含了程序的名称。

更高级的版本是使用十六进制编辑器,或者配置 vi[m] 以不同的格式显示数据xxd

答案3

回答您帖子主题提出的问题(如何获取文件的“原始二进制转储”?):

文件a.a包含字母“a”,后面跟着碳排放 如果

C:\Program Files\Vim\vim73
>type a.a
a

xxd -b(二进制)不支持-ps(普通),所以你会得到一些垃圾(0000000:a..

C:\Program Files\Vim\vim73
>xxd -b a.a
0000000: 01100001 00001101 00001010                             a..

解决方案如下:

xxd -b a.a | sed -r "s/\d32{3,}.*//g" | sed "s/.*://" | sed "s/\d32//g"

它产生

011000010000110100001010

以下是工作原理。

让我们看看它 0000000: 01100001 00001101 00001010 a..是如何组成的。好的,大间隙是一堆空格。

C:\Program Files\Vim\vim73
>xxd -b a.a | od -tx1
0000000 30 30 30 30 30 30 30 3a 20 30 31 31 30 30 30 30
0000020 31 20 30 30 30 30 31 31 30 31 20 30 30 30 30 31
0000040 30 31 30 20 20 20 20 20 20 20 20 20 20 20 20 20
0000060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0000100 61 2e 2e 0d 0a
0000105

我删除了长空格序列以及其后的所有内容。因此它到达了那里:

C:\Program Files\Vim\vim73
>xxd -b a.a | sed -r "s/\d32{3,}.*//g"
0000000: 01100001 00001101 00001010

删除直到冒号为止的 0(包括冒号),并删除任何其他空格:

C:\Program Files\Vim\vim73
xxd -b a.a | sed -r "s/\d32{3,}.*//g" | sed "s/.*://"
 01100001 00001101 00001010

C:\Program Files\Vim\vim73
>xxd -b a.a | sed -r "s/\d32{3,}.*//g" | sed "s/.*://" | sed "s/\d32//g"
011000010000110100001010

所以有一个解决方案

C:\Program Files\Vim\vim73
>xxd -b a.a | sed -r "s/\d32{3,}.*//g" | sed "s/.*://" | sed "s/\d32//g"
011000010000110100001010

xxd 有以下版本Vim7.x 和sed有售操作系统

答案4

@slhck 查看了包含转储的问题vi。此处引用部分内容:

^@^@^@^@^@^@^@^@^@ò½^@^@;C:\eLecta\Server\TempRecordings\U734806R4970S3962792726.el8¢s³wÕs³w^@^@^@^@è(D

在 Windows 上,使用以下命令获取二进制转储氢键。或者您可能只是尝试在记事本中打开该文件。类似情况也适用于 *nix 系统。

相关内容