使用hexdump仅输出ASCII

rec*_*uze 23 linux command-line hexdump

我正在尝试输出与某些二进制数据相对应的ASCII值.我已成功应用该hexdump实用程序并排输出hexdump和ASCII,如下所示:

00000120  20 20 20 20 3d 20 30 78  30 30 30 30 30 30 33 30  |    = 0x00000030|
00000130  0a 01 00 00 00 23 00 00  00 75 75 69 64 30 20 20  |.....#...uuid0  |
00000140  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3d  |               =|
00000150  20 30 78 39 30 38 32 61  63 35 61 0a 01 00 00 00  | 0x9082ac5a.....|
00000160  23 00 00 00 75 75 69 64  31 20 20 20 20 20 20 20  |#...uuid1       |
00000170  20 20 20 20 20 20 20 20  20 20 3d 20 30 78 37 34  |          = 0x74|
00000180  61 37 34 37 36 66 0a 01  00 00 00 23 00 00 00 75  |a7476f.....#...u|
00000190  75 69 64 32 20 20 20 20  20 20 20 20 20 20 20 20  |uid2            |
000001a0  20 20 20 20 20 3d 20 30  78 61 32 35 35 35 63 30  |     = 0xa2555c0|
Run Code Online (Sandbox Code Playgroud)

但是,我想只看到ASCII作为输出值.我对十六进制值不感兴趣.例如,输出应该是以下(大约对应于上面的):

= 0x00000030.....#...
uuid0=0x9082ac5a.....
uuid1=0x74a7476f
Run Code Online (Sandbox Code Playgroud)

(我无法使用此开关hd.)

rai*_*7ow 36

如果您只需要查看二进制文件的文本内容,则字符串应该是有用的:

对于给定的每个文件,GNU strings打印至少4个字符长的可打印字符序列(或使用该-n选项给出的数字),后跟不可打印的字符. strings主要用于确定非文本文件的内容.

  • 最好添加`-n`选项,例如`strings -n 2 a.out |。少-N`,因为默认情况下,`strings`仅将长度大于等于4的char序列视为string,因此默认情况下不打印elf二进制文件的标头'ELF'。 (2认同)

RBe*_*eig 8

虽然raina77ow关于strings(1)命令的答案是获得您真正想要的结果的正确方法,但是hexdump(1)在某些情况下,用于过滤掉仅可打印字符的特定请求可能是有意义的.我会在这里具体回应.

hexdump实用程序证明支持一个惊人的通用格式引擎.这可能是为了使各种可选格式的实现更加统一.如果您的hexdump副本通过-e命令行选项公开该引擎(尽可能多),那么您实际上可以让它按照您的要求执行.

关键是-e它支持的选项和格式化语言.该语言允许指定消耗输入字节并生成文本的格式字符串.一个命令如:

$ hexdump -e "16 \"%_p\" \"\\n\"" hexdump.exe | head -16
Run Code Online (Sandbox Code Playgroud)

将一次消耗16个字节,通过%_p格式显示它们,并在每个第16个字节后添加换行符.每个不可打印的字符.在输出中替换为a .

其他面向字符的格式是%_c%_u.第一个用其ANSI-C转义序列替换非打印字符,或用三位八进制数替换非打印字符.第二个用ASCII控制字符的常规名称或两位十六进制数字替换非打印每个字符.

如果您的副本hexdump缺少-e选项,或者速度很慢,或者您完全没有实现hexdump,那么William Ahernhexdump最近发布的自由许可,快速且合理的便携式实现值得关注.它应该为许多类似Unix的系统提供开箱即用的功能,并且只需要在Windows上使用MingW GCC进行微调.该实现方式的一个关键属性是单个源文件可以被构建为包含在其他程序的共享库,作为一个Lua模块,用于从使用的Lua,以及一个独立的可执行文件执行hexdump命令.

  • 您可以将`"`替换为`'`并避免转义,查看:`hexdump -e '16 "%_p" "\n"'` (2认同)

iab*_*der 7

你可以使用od:

od -t c file
Run Code Online (Sandbox Code Playgroud)

awkhexdump像这样:

hexdump -C file | awk '{for(i=NF; i>17; --i) print $i}'
Run Code Online (Sandbox Code Playgroud)

注意:如果更改hexdump中的列数,则必须更改awk命令.