前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Hexdump如何工作【Linux-Command line】

Hexdump如何工作【Linux-Command line】

作者头像
QRosie
修改于 2019-11-26 02:09:08
修改于 2019-11-26 02:09:08
2.3K00
代码可运行
举报
运行总次数:0
代码可运行

Hexdump可帮助查证二进制文件的内容。

了解hexdump的工作原理吧。

图片来源:Lewis Cowles, CC BY-SA 4.0
图片来源:Lewis Cowles, CC BY-SA 4.0

Hexdump是一种实用程序,可以以十六进制,十进制,八进制或ASCII显示二进制文件的内容。 它是一种检查工具,可用于数据恢复,逆向工程和编程。

了解基础

Hexdump可以以很少的工作量提供输出,根据你正在查看的文件的大小,可能会有很多输出。 为实现本文目的,创建一个1x1 PNG文件。 可以使用GIMPMtpaint等图形应用程序来执行此操作,也可以使用ImageMagick在终端中创建它。

这是使用ImageMagick生成1x1像素PNG的命令:

可以使用file命令确认此文件是PNG:

你可能想知道file命令如何确定文件类型。 巧合的是,这就是Hexdump所揭示的。 目前,你可以在所选的图像查看器中查看一个像素的图形(它看起来像是“.”),也可以使用hexdump查看文件中的内容:

你所看到的是通过以前从未使用过的lens得到的示例PNG文件的内容。 这些数据与你在图像查看器中看到的数据完全相同,并且以你可能不熟悉的方式进行了编码。

提取熟悉的字符串

仅仅因为默认数据转储似乎毫无意义,并不意味着它就没有有价值的信息。 你可以使用“--canonical”选项将此输出或至少实际翻译的部分转换为更熟悉的字符集:

在右列中,你会看到与左侧相同但以ASCII形式显示的数据。 如果仔细看,可以发现一些有用的信息,例如文件的格式(PNG),以及文件创建和最后修改的日期和时间(从最底部开始)。 点表示ASCII字符集中不存在的符号,这是可以预期的,因为二进制格式不限于普通的字母和数字。

file命令从前8个字节知道该文件是什么。 libpng specification警示程序员寻找什么。 可以看到,在此图像文件的前8个字节内,特别是字符串PNG。 这很重要,因为它揭示了file命令如何知道要报告的文件类型。

你还可以控制hexdump显示多少字节,这对于大于一个像素的文件很有用:

你不必将hexdump限制为PNG或图形文件。 你还可以针对每天运行的二进制文件运行hexdump,例如lsrsync或要检查的任何二进制格式。

用hexdump实现cat

如果阅读了PNG规范,你可能会注意到前8个字节中的数据看起来与hexdump提供的数据有所不同。 实际上,它们是相同的数据,但是使用不同的转换来显示。 因此,hexdump的输出是真实的,但对你而言并不总是直接可用,这取决于你要查找的内容。 因此,hexdump具有用于格式化和转换其转储的原始数据的选项。

转换选项可能会变得很复杂,因此先进行一些琐碎的练习很有用。 这里是通过重新实现cat命令格式化hexdump输出格式的简短介绍。 首先,在文本文件上运行hexdump以查看其原始数据。 通常,你可以在硬盘驱动器上的某个位置找到GNU General Public License(GPL)许可证的副本,也可以使用任何方便的文本文件。 你的输出可能会有所不同,但是以下是在系统上(或至少部分系统上)查找GPL副本的方法:

对它运行hexdump:

如果文件的输出很长,请使用“--length“(或“-n”缩写)使其易于管理。

原始数据可能对你没有任何意义,但是你已经知道如何将其转换为ASCII:

该输出很有帮助,但笨拙且难以阅读。 要格式化hexdump的输出超出其自身选项所提供的范围,请使用“--format”(或“-e”)以及专门的格式化代码。 用于格式化的简写类似于printf命令使用的简写,因此,如果你熟悉printf语句,你可能会发现hexdump格式化更容易学习。

在hexdump中,字符序列%_p告诉hexdump在系统的默认字符集中打印字符。“ --format”选项的所有格式符号必须用单引号引起来:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ hexdump -e'"%_p"' /usr/share/doc/libblkid-devel/COPYING
This library is fre*
 software; you can redistribute it and/or.modify it under the terms of the GNU Les*
er General Public.License as published by the Fre*
 Software Foundation; either.version 2.1 of the License, or (at your option) any later.version..*
The complete text of the license is available in the..*
/Documentation/licenses/COPYING.LGPL-2.1-or-later file..

此输出更好,但仍不方便阅读。 传统上,UNIX文本文件采用80个字符的输出宽度(因为很久以前,监视器往往只能容纳80个字符)。

尽管此输出不受格式限制,但可以通过附加选项强制hexdump一次处理80个字节。 具体来说,通过将80除以1,可以告诉hexdump将80字节视为一个单位:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ hexdump -e'80/1 "%_p"' /usr/share/doc/libblkid-devel/COPYING
This library is free software; you can redistribute it and/or.modify it under the terms of the GNU Lesser General Public.License as published by the Free Software Foundation; either.version 2.1 of the License, or (at your option) any later.version...The complete text of the license is available in the.../Documentation/licenses/COPYING.LGPL-2.1-or-later file..

现在,文件已以80字节的块进行处理,但失去了换行的感觉。 可以使用“\ n”字符添加自己的字符,该字符在UNIX中代表新行:

你现在(大致)已使用hexdump格式实现了cat命令。

控制输出

实际上,格式化是使hexdump有用的方式。 现在,至少在原则上已经熟悉hexdump格式,可以使hexdump -n 8的输出与官方libpng规范所述的PNG标头的输出匹配。

首先,你知道要hexdump以8字节的块形式处理PNG文件。 此外,通过整数识别,你可能知道PNG规范以十进制表示,根据hexdump文档,它由“%d”表示:

可以通过在每个整数后面添加一个空格来使输出完美:

现在,输出与PNG规范完美匹配。

Hexdumping --为了乐趣与利益

Hexdump是一个引人入胜的工具,不仅可以教你更多有关计算机如何处理和转换信息的知识,而且还可以教你文件格式和已编译二进制文件的功能。你可以在工作期间全天随机尝试对文件运行hexdump。 你无法预料自己会发现什么样的信息,也料想不到何时能收获实用信息。

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
9个基本的GNU binutils 工具【Linux-Command-line】
想象一下,尽管无法访问软件的源代码,但仍然能够理解软件的实现方式,在其中找到漏洞,并且(更好的是)修复了错误。 凡此种种都源于二进制形式。 听起来像是拥有超能力,不是吗?
QRosie
2019/11/20
4.3K0
9个基本的GNU binutils 工具【Linux-Command-line】
linux hexdump命令_hexdump用法
大家好,又见面了,我是你们的朋友全栈君。 Linux中hexdump命令 简介 hexdump主要用来查看“二进制”文件的十六进制编码。*注意:它能够查看任何文件,不限于与二进制文件。* 语法 hexdump [选项] [文件]… 选项 –n length:格式化输出文件的前length个字节 –C:输出规范的十六进制和ASCII码 -b:单字节八进制显示 -c:单字节字符显示 -d:双字节十进制显示 -o:双字节八进制显示 -x:双字节十六进制显示 -s:从偏移量开始输出 -e 指定格式字符串,格式字
全栈程序员站长
2022/08/02
8190
API测试--HTTPie入门【Linux-Command line】
使用HTTPie(一种使用Python编写的易于使用的命令行工具)调试API客户端。
QRosie
2019/11/24
1.2K0
API测试--HTTPie入门【Linux-Command line】
hexdump 工具使用 和 .txt 文件的二进制查看
最近使用txt文件进行数据处理的时候,突然发现txt文件是怎样编码数据的了,它是以二进制来进行存储的吗?为了知道这个情况,我使用hexdump工具进行查看txt文件的二进制形式,并顺道进行学习了hexdump文件的使用:
西湖醋鱼
2020/12/30
1.4K0
hexdump 工具使用 和 .txt 文件的二进制查看
linux hexdump显示格式c数组,hexdump命令
hexdump命令一般用来查看“二进制”文件的十六进制编码,但实际上它能查看任何文件,而不只限于二进制文件。
全栈程序员站长
2022/11/08
1.4K0
在命令行进行sort排序【Linux-Command line】
使用sort命令重组数据,可以从Linux,BSD或Mac终端以对你有意义的格式进行。
QRosie
2019/11/17
2.5K0
在命令行进行sort排序【Linux-Command line】
3个用于从命令行进行演示的工具【Linux-Command line】
mdp,tpp和send可能不会为你赢得任何设计大奖,但是它们会为你提供可以从终端运行的基本幻灯片。
QRosie
2019/12/07
2.3K0
3个用于从命令行进行演示的工具【Linux-Command line】
Linux tac命令入门【Linux-Command line】
tac命令本质上是cat命令,但其目的是反向连接文件。 像cat一样,如果没有提供输出文件,它也具有方便的后备模式,可打印到标准输出(STDOUT),使其成为比lazy pager(像“less and more”)更常用的命令之一。该function因此命名。
QRosie
2019/11/22
4.1K0
Linux tac命令入门【Linux-Command line】
【linux命令讲解大全】067.文件查看与内核引导工具:hexdump和kexec
hexdump命令一般用来查看“二进制”文件的十六进制编码,但实际上它能查看任何文件,而不只限于二进制文件。
全栈若城
2024/03/02
1210
linux命令hexdump,Linux系统中hexdump的命令汇总
hexdump是Linux系统中用来查看文件十六进制编码的命令,配合不同的参数其作用也有所不同,下面小编就给大家介绍下Linux中hexdump命令的用法,不了解的`朋友不妨来学习一下。
全栈程序员站长
2022/09/29
4.5K0
显示硬件信息的Linux命令【Linux-Command line】
可能有很多原因导致你需要查找有关计算机硬件的详细信息。 例如,如果需要帮助修复某些问题并在在线论坛上发布请求,人们会立即询问你有关计算机的详细信息。 再者,如果要升级计算机,则需要知道你已有的和可以拥有的。你需询问计算机以查看其规格。
QRosie
2019/11/24
4.3K0
显示硬件信息的Linux命令【Linux-Command line】
Linux useradd命令简介【Linux-Command line】
添加用户是任何计算机系统上最基本的练习之一。 本文重点介绍如何在Linux系统上执行此操作。
QRosie
2019/11/17
1.2K0
Linux useradd命令简介【Linux-Command line】
python hexdump_笨办法学 Python · 续 练习 26:`hexdump`
你已经用xargs完成了热身,现在正在代码/审计的循环中。你现在将尝试以“测试优先”方式完成下一个挑战。这就是,你编写测试,它描述你的预期行为,然后实现该行为,直到通过测试。你将要复制hexdump工具,并尝试将你的版本的输出与真实版本匹配。这是“测试优先”开发真正有帮助的地方,因为它自动化了模仿另一个软件的流程。
全栈程序员站长
2022/11/08
4250
Linux 命令(142)—— hexdump 命令
格式字符串可以包含任意数量的格式单元,由空格分隔。格式单元最多包含三项:迭代计数、字节计数和格式。
恋喵大鲤鱼
2022/09/19
3.7K0
更改Linux终端颜色主题【Linux-Command line】
如果你一整天都盯着终端,自然想让它变得赏心悦目。 对美的判断因人而异,自CRT串行控制台问世以来,终端已经走了很长一段路。 因此,很有可能你的软件终端窗口中有很多选项可以使你看到的内容主题化,不管你如何定义美。
QRosie
2019/11/24
9K0
更改Linux终端颜色主题【Linux-Command line】
Linux chgrp和newgrp命令简介【Linux-Command line】
在近期的文章中,我介绍了chown命令,该命令用于修改系统上文件的所有权。 回想一下,所有权是分配给对象的用户和组的组合。 chgrp和newgrp命令为管理需要维护组所有权的文件提供了额外帮助。
QRosie
2019/11/20
1.2K0
Linux chgrp和newgrp命令简介【Linux-Command line】
7个实用的Bash历史快捷方式【Linux-Command line】
大多数Bash历史快捷方式指南都详尽列出了每个可用的条目。 这样做的问题是,我只使用一次快捷方式,当我尝试所有可能性时,我变得目光呆滞。 然后,我将投入工作并完全忘记它们,只保留著名的!! trick,那些我第一次开始使用Bash时就学到的技巧。
QRosie
2019/11/20
8670
7个实用的Bash历史快捷方式【Linux-Command line】
Linux 命令 | 每日一学,文本处理之文件内容查看实践
描述:此命令将读取文件并打印到标准输出设备上(显示、读取或拼接文件内容), 常用来显示文件的内容类似于windows系统里的type命令。
全栈工程师修炼指南
2024/09/24
1530
Linux 命令 | 每日一学,文本处理之文件内容查看实践
python hexdump_细说Linux中怎么用hexdump命令
hexdump命令一般用来查看”二进制”文件的十六进制编码,从手册上查看,其查看的内容还要很多,诸如:ascii, decimal, hexadecimal, octal
全栈程序员站长
2022/09/30
2.6K0
python hexdump_细说Linux中怎么用hexdump命令
Linux命令(2)——od命令
od命令用于将指定文件内容以八进制、十进制、十六进制、浮点格式或ASCII编码字符方式显示,通常用于显示或查看文件中不能直接显示在终端的字符。od命令系统默认的显示方式是八进制,名称源于Octal Dump。
恋喵大鲤鱼
2018/08/03
2.9K0
推荐阅读
相关推荐
9个基本的GNU binutils 工具【Linux-Command-line】
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文