hexdump什么意思_生成coredump文件

hexdump什么意思_生成coredump文件博客原文hexdump可以自定义显示格式,不过要理解其中formatunit以及一些概念才能灵活使用.在hexdump中使用formatstring的方式如下:$hexdump-e’<formatstring>’<filename>formatunitformatstring由formatunit组成,而formatunit由如下部分…


Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

博客原文
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 byte
    		output 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/ls
 7F 45 4C 46 02 01 01 00 00 00 00 00 00 00 00 00
offset: 0
 02 00 3E 00 01 00 00 00 A0 49 40 00 00 00 00 00
offset: 16
 40 00 00 00 00 00 00 00 38 E7 01 00 00 00 00 00
offset: 32
 00 00 00 00 40 00 38 00 09 00 40 00 1D 00 1C 00
offset: 48
 06 00 00 00 05 00 00 00 40 00 00 00 00 00 00 00
offset: 64
 40 00 40 00 00 00 00 00 40 00 40 00 00 00 00 00
offset: 80
 F8 01 00 00 00 00 00 00 F8 01 00 00 00 00 00 00
offset: 96
 08 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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/191025.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 网页设计css导航链接怎么做,如何用DIV+CSS制作导航条

    网页设计css导航链接怎么做,如何用DIV+CSS制作导航条一个蓝色主题的导航条布局案例,本CSS小实例,采用DIVCSS实现。同时不用图片做背景,直接使用背景色实现,鼠标经过悬停对应栏目名称是对应背景蓝色变深。一般导航条采用ulli列表布局,这里也不例外DIVCSS5实例也采用列表标签ulli+CSS布局。这样的导航条有以下二部分代码组成。1、CSS代码:ul#nav{width:100%;height:60px;background:#…

    2022年7月22日
  • 个人开发者app消息推送简单实现思路

    个人开发者app消息推送简单实现思路最近新做了一个app,中午没事大脑在简单的思索者。。假如:我的这个app很火,用的人会很多,那么它就成了我的一个个人平台。如果我想让给广大用户推送一个新消息,该怎么办?当然你可以百度搜服务器消息推送实现之类的。但是软而一想,能不能通过一个简单方法实现呢。我想应该是有的。前期准备:1.首先我们花几十元注册个域名2.购买个便宜的主机,网上有一年几十元的那种3.将域名解析

    2022年5月11日
  • python 获取当前日期 星期[通俗易懂]

    python 获取当前日期 星期

    2022年1月24日
  • 讲解最到位的粒子群算法,附matlab代码求解函数最优值

    讲解最到位的粒子群算法,附matlab代码求解函数最优值从鸟群觅食行为到粒子群算法粒子群算法的核心例:求解函数最小值粒子群算法的驱动因素从鸟群觅食行为到粒子群算法鸟群寻找食物的过程中,鸟与鸟之间存在着信息的交换,每只鸟搜索目前离食物最近的鸟的周围区域是找到食物的最简单有效的办法。粒子群算法(以下简称PSO)就是模拟鸟群觅食行为的一种彷生算法。解=粒子=鸟(鸟的位置象征着离食物的距离,粒子的位置也象征着…

    2022年5月31日
  • mac navicat premium15 激活码 破解[在线序列号]

    mac navicat premium15 激活码 破解[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
  • Linux学习笔记09 — 超详细shell脚本编程快速入门

    Linux学习笔记09 — 超详细shell脚本编程快速入门文章目录1.shell简介1)什么是shell2)shell脚本3)运行shell脚本4)shell注释5)shell编写的基本步骤2.shell变量1)命名变量2)使用变量3)变量类型3)变量操作3.shell字符串1)字符串类型2)字符串操作4.shell数组1)定义数组2)数组操作5.shell传递参数6.shell运算符1)shell运算符种类2)算数运算符3)关系运算符4)布尔运算符5)…

    2022年10月3日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号