博客原文
hexdump可以自定义显示格式, 不过要理解其中format unit以及一些概念才能灵活使用.

在hexdump中使用format string的方式如下:

$ hexdump -e '<format string>' <filename>

format unit

format string由format unit组成, 而format unit由如下部分组成:

  • iteration count,可选, 一个整数, 表示每个这个format unit被应用的次数, 默认值1
  • byte count,可选, 整数, 表示一次iteration处理的字节数, 默认值1
  • format, 必选, 是fprintf风格的字符串, 必须使用双引号括起来

其中iteration count和byte count使用/分隔.

举例:

$ hexdump -n 16 /bin/ls -e '16/1 "%c"'
ELF
$ hexdump -n 16 /bin/ls -e '16/ "%c"'
ELF
$ hexdump -n 16 /bin/ls -e '16 "%c"'
ELF

上面三个命令的功能和输出都是一样的, 功能是读取/bin/ls的前16个字节, 然后依次按照他们的字符含义打印出来.

可以看出当只有iteration count的时候, /和byte count都是可以省略的.

iteration count & byte count

下面来说说我对iteration count和byte count的理解.

使用伪代码描述如下:

while there is data to process:for unit in format_string:for i: 1->unit.iteration_count:consume unit.byte_count byteoutput like unit.format

iteration count是这个unit中的format被应用的次数

byte count是这个unit中format处理的字节数.

举例:

$ hexdump -n 16 /bin/ls -e '4/1 "%c" 12/1 " %02X"'
ELF 02 01 01 00 00 00 00 00 00 00 00 00

上面这个例子中的format string可以分为两个format unit: 4/1 "%c"12/1 " %02X"

所以就是先处理第一个unit, 意为一次处理1个byte, 当作字符输出, 处理4次.

然后处理第二个unit, 意为一次处理1个byte, 输出为16进制整数, 处理12次.

为了更好地理解byte count, 再看一个例子:

$ hexdump -n 16 /bin/ls -e '3/4 " %08x"'464c457f 00010102 00000000 00000000

从例子中看出, 3/4确实是一次处理4个byte, 然后把这4个byte作为一个整体, 应用%08x进行输出, 结合字节序, 原来的02 01 01 00作为16进制输出就是00010102.

但是3/4不是表明iteration count为3吗? 怎么出现了4个部分呢?

这是因为处理完3次之后, 发现没有其它的format string了, 再次应用format string来处理接下来的内容.

高级用法

多个format string

当有多个format string的时候, 是顺序应用每个format string的, 并且每轮处理, 每个format string的偏移是相同的:

$ hexdump -n 128 -e '16/1 " %02X" "\n"' -e '"offset: %_ad\n"' /bin/ls7F 45 4C 46 02 01 01 00 00 00 00 00 00 00 00 00
offset: 002 00 3E 00 01 00 00 00 A0 49 40 00 00 00 00 00
offset: 1640 00 00 00 00 00 00 00 38 E7 01 00 00 00 00 00
offset: 3200 00 00 00 40 00 38 00 09 00 40 00 1D 00 1C 00
offset: 4806 00 00 00 05 00 00 00 40 00 00 00 00 00 00 00
offset: 6440 00 40 00 00 00 00 00 40 00 40 00 00 00 00 00
offset: 80F8 01 00 00 00 00 00 00 F8 01 00 00 00 00 00 00
offset: 9608 00 00 00 00 00 00 00 03 00 00 00 04 00 00 00
offset: 112

hexdump格式控制符

处理fprintf风格中的各种输出格式控制符之外, hexdump还有其它的控制符.

%_a[dos]

输出当前位置离起始位置的偏移, dos表示输出的进制.

$ hexdump -n 1 -s 40 -e '1/1 "%_ad"' /bin/ls
40

%_A[dos]

类似上面的, 不过这个是在处理完数据之后的偏移.

$ hexdump -n 5 -s 40 -e '1/1 "%_Ad" 2/1 "%x" 2/1 " %02x"' /bin/ls
45

上面的format string明明有3个format unit, 却只有一个输出, 再次试验:

$ hexdump -n 5 -s 40 -e '2/1 " %02x" 1/1 "%_Ad" 2/1 " %02x"' /bin/ls        38 e745

发现凡是%_Ad之后的内容都没有输出, 取而代之的是输出这个format string处理之后的偏移量.

%_c

显示字符, 对于ascii码对应的转义字符, 比如ascii为0, 则显示\0

如果遇到的是其它的控制字符, 比如esc, 显示\033这中八进制表示

$ printf "\n" | hexdump -e '"%_c"'
\n
$ printf \033 | hexdump -e '"%_c"'
033

%_p

显示字符, 对于非打印字符, 显示.

$ printf "non-printing:\033\n" | hexdump -e '"%_p"'
non-printing:..

%_u

显示字符, 对于控制字符, 显示小写的缩写, 比如\n显示成lf(line feed).

$ printf "non-printing:\033\n" | hexdump -e '"%_u"'
non-printing:esclf

长度分类

1byte的控制序列:%_c, %_p, %_u, %c

默认4byte, 但支持1,2,4byte: %d, %i, %o, %u, %X, %x

默认8byte, 但支持4, 12byte: %E, %e, %f, %G, %g

hexdump-format相关推荐

  1. 交互式数据包处理程序 Scapy 用法

    From:https://www.cnblogs.com/hongxueyong/p/5641475.html Scapy 用法官方文档:http://scapy.readthedocs.io/en/ ...

  2. 常用MIME类型(Mp4的mime类型设置)

    前两天在遇到了一个h5写的mp4视频网页在某些电脑中打开后只下载而不播放的问题(大部分电脑都播放正确,而有些电脑在打开网页时就会变成迅雷下载,下载完成也不会播放). html如下: <video ...

  3. Scapy用法官方文档

    Scapy用法 2016年6月10日 星期五 20:15 http://www.secdev.org/projects/scapy/doc/usage.html#starting-scapy 开始学习 ...

  4. Scapy3.0 Documentation ( Usage )

    说明:写到这里来,只是因为原文链接打开太慢了,至于翻译什么的就不误导大家了,还是原文好看 原文链接:http://phaethon.github.io/scapy/api/usage.html Usa ...

  5. Networking

    总览 The development of the Internet has led to an exponential increase in network applications and, a ...

  6. linux检查acpi,Linux系统中ACPI Table读取与解析

    Linux Read ACPI Table Tools. ACPI tools的安装: #yum install acpica-tools 或者到下面链接下载源码: 下面示例是解析SSDT1表的步骤. ...

  7. Linux命令学习总结:hexdump

    命令简介: hexdump是Linux下的一个二进制文件查看工具,它可以将二进制文件转换为ASCII.八进制.十进制.十六进制格式进行查看. 指令所在路径:/usr/bin/hexdump 命令语法: ...

  8. Linux进制查看工具:od、hexdump、xxd

    od 命令 :http://man.linuxde.net/od od 命令 od命令用于将指定文件内容以八进制.十进制.十六进制.浮点格式或ASCII编码字符方式显示,通常使用od命令查看特殊格式的 ...

  9. SG3 tool hdd 512/520 format

    #apt-get 去安裝 [root@benjr ~]# apt-get install sg3-utils The Linux sg3_utils package http://sg.danny.c ...

  10. Linux命令--hexdump(以16进制查看文件内容)

    原文网址:Linux命令--hexdump(以16进制查看文件内容)_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Linux的tac命令的用法. hexdump用于以16进制查看文件内容 格式 h ...

最新文章

  1. 乌鲁木齐市计算机职业高中,乌鲁木齐职高有哪些专业
  2. Jmeter性能测试之if控制器的使用
  3. MySQL设置表的字段值自动增加
  4. rss聚合模式案例_RSS的完整形式是什么?
  5. 怎样在linux中创建硬盘,在linux中添加新硬盘并创建LVM组
  6. 网站泛解析 和 主记录解析
  7. 命名空间“System.Web”中不存在类型或命名空间名称“HttpUtility”。是否缺少程序集引用?...
  8. 190518每日一句
  9. 所用软件安装及环境配置
  10. 自组织神经网络:自组织特征映射SOM网络
  11. 固定资产取消月末结账时报错,提示:BOF或EOF中有一个是“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录...
  12. Python安全之使用Python进行MD5解密
  13. 显卡,就是一个男人对自己的交待
  14. 基于51单片机之数码管设计#扩展三位数码管电路,完成0-999递增或递减计数功能,递减间隔200ms左右
  15. Mac版Dream weaver CC 2018如何安装教程(%¥c%激*.活)和汉化
  16. 苹果AR/VR设备或定价2000美元 或命名Apple Vision
  17. 从CPU和GPU出发的UGUI优化
  18. OCR文档识别——数据录入工厂
  19. 【项目笔记_手写笔】在51822 上移植SSD1306驱动
  20. 答复 我不会OOO,仍然可以XXX

热门文章

  1. 网络变压器是干什么用的?(以太网 网络 LAN 局域网 通讯隔离滤波器)生产工厂/产品原理图/常用产品/价格影响因素
  2. 表格标题中方正小标宋简体为什么显示不一样?
  3. JS实现网页自动跳转
  4. 第一篇 javase时钟表
  5. 如何通过QQ进行手机号溯源
  6. 通俗理解kaggle比赛大杀器xgboost
  7. 电磁兼容stm32芯片引脚失效问题
  8. requests库(正则提取)爬取千图网
  9. matlab 幂法,数值分析试验幂法与反幂法matlab.doc
  10. 联想笔记本老是出现仅计算机,联想电脑开机只显示节能模式怎么办