我记不住的那些命令-xxdod

news2024/9/22 17:31:03

背景:

这里记录一下具体的xxd和od命令参数和使用方法,我想我肯定是记不住这些参数的。

零、文件

我们这里有一个示例文件README.txt,内容如下图所示:

一、xxd(查看、编辑二进制文件)

1.  十六进制显示(默认)

我们发现上面的显示,总共由 8 列组成,每一列是2个字节,这一行是16个字节的数据,左侧是相应的地址。

重点:磁盘上的这些十六进制的内容英文字母使用ascii码来显示,例如:'bochs-2.8'   0x626f 6368 732d 322e 38,每一个字母使用一个字节来表示,0x0a代表是换行,两次换行后就是中文,而中文内容使用utf-8编码来表示, 例如:"生成一个硬盘"即如下图所示,是使用Python来将这一句话转换为utf-8编码。

综上: xxd查看磁盘上文件的十六进制,英文是ASCII编码,中文是utf-8编码。

2.  二进制显示

-b  以二进制进行显示

我们发现这种是 由 6 列组成,每一列是 1 个字节,这一行是 6个字节的数据,左侧是相应的地址。

问题: 从十六进制看和二进制看,发现每一行的字节数是无法一一对应上的,我们需要修改列数和每列的字节数来保持同一个文件的不同格式的查看。

3. 每行的总字节数(-c),每列的字节数(-g)

我们根据二进制的显示,发现每行是6列,每列是一个字节,所以这里的 -c 6  -g 1  如上图所示。

这样能解决,二进制和十六进制的同时查看且每行数据都放置在了相同行,没发生错行。

-g  每一列显示几个字节,默认是2个字节

-c   每一行显示的总共的字节数

如下图所示,一行是8个字节,每一列时候2个字节,总共是4列数据。

每一行是8个字节,每一列是1个字节,总共是8列数据,如下图所示:

4. 长度(-l),偏移量(-s)

从0x00000010开始,长度为32个字节

我们从完整文件中取出了第2行和第3行数据。

-s (+/-)value  偏移量,如果是正值则是从开始计算,如果是负值则是从末尾进行计算

5. 朴素方式显示(-p) plane

没有任何行号标记以及解码,直接就是显示十六进制的值。

6. 大写(-u)

将十六进制的字母大写

7. 恢复(-r)
7.1  部分修改

我们看到原始内容是60MB,下面的操作修改二进制将60MB改成120MB

我们发现60MB改成120MB,只需要将 “空格6”变为“12”即可, “空格6”为 0x2036, ASCII码中0x20代表空格,ASCII码中0x36代表6,得到 “12”的ASCII为 0x3132

这里的44:3132,代表在0x44的字节开始,写入0x3132的值。

将README.txt在0x44字节开始,写入0x3132

我们再次查看文件十六进制,发现已经改为了120MB了

创建一个新文件,这个文件在第0x100字节写上A:

我们再次查看 test.txt :

7.2 全部修改

这里我们以MBR二进制文件来编辑,不再使用文本文件来编辑(因为文本文件直接修改就行,无需转换为十六进制修改)。

先查看 mbr.img的十六进制信息

将十六进制信息保存为一个文件dump

xxd mbr.img mbr.dump

vim mbr.dump进行修改,直接修改

注意: 修改左侧的十六进制的ASCII码或者UTF-8码才会生效,而修改右侧的英文或中文则没有效果。

我们将baby改为haha ,   0x62616279 --->>>  0x68616861  ,只改左侧的十六进制码值,右侧的文字不用改动,如下图所示:

将这个文件mbr.dump恢复为新的二进制文件:

xxd -r mbr.dump > newmbr.img 或 xxd -r mbr.dump newmbr.img

我们把这个newmbr.img放到bochs试一下:

将newmbr.bin复制到硬盘文件上,然后启动机器,如下图所示

8.搭配vim使用

我们使用vim打开的二进制文件,然后会看到一些乱码和一些错乱的内容,我们使用:%!xxd 命令来查看二进制文件的十六进制码值的显示。

vim -b binaryfile   // 设置二进制方式来读取和编辑文件,它与 vim binaryfile的区别在于, vim binaryfile会多显示一个最后的换行符,在windows下是 0x0d 0x0a ,在Linux下是0x0a

或者

vim binaryfile  

:set binary 或 :set bin  // 进入到二进制模式

综上:这是两种不同的打开二进制文件的方式。

然后在底部输入 :%!xxd进行编辑即可, %表示操作整个缓冲区,! 表示执行外部的命令

我们这次将 haha改为fafa,0x68616861 --->>> 0x66616661

修改完毕后,底部输入命令 :%!xxd -r 直接进行修改,  或者  :%!xxd -r > newmbr2.img 修改保存到一个新二进制文件中。

完成。

9. 输出为C代码(-i)

将二进制文件直接输出为 C代码

二、od

1. 版本(--version)

--version 显示版本

2. 帮助(--help)

--help  帮助

3. 输出格式(-t)

-t x1   输出十六进制,每一列是一个字节,x代表是十六进制,1代表每列是一个字节

同理 -t x2  输出十六进制,每列是两个字节,这里有一个关键的区别千万要注意,如下图所示:

而 xxd -g 2 mbr.img如下所示:

我们发现xxd的双字节是和右侧的字符按照从左到右的顺序是一一对应,而od的双字节是按照书写的方式进行0x36d8,这里面蕴含着大端和小端的概念。关于这部分知识可以查看 基础知识-大小端

4. 每行的总字节数(-w)

-w 默认是16个字节

5. 长度(-N),偏移量(-j)

-j 字节数,代表偏移

-N 字节数,代表长度

6. 全部(-v)

默认情况是00会被显示"*",它不带有什么意义。如果想全部显示内容,增加-v即可。

7. 大小端(--endian)

--endian  big/little(略)

8. 地址(-A)

默认是以十六进制的地址来显示偏移量,如下图:

我们使用-A d来将左侧的地址变为十进制

三、总结

在Linux下除了xxd和od这两个命令可以查看二进制,还有hexdump命令可以查看,咱们不再这里再次赘述了,使用起来都差不多,用哪一个都行,大家加油,完结。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1518614.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【jQuery】一篇文章学会jQuery!

一、JavaScript与jQuery JavaScript(简称JS)是一种广泛应用的编程语言,主要用于网页开发。它是一种多才多艺、动态性强的语言,允许开发人员为网页应用添加交互性、操作文档对象模型(DOM)并创建丰富的用户体…

网络编程:TCP和UDP

一、通信模式 1.1 套接字socket 1.网络通信通过套接字进行数据传输 2.socket是一个函数,为通信创建一个端点,并返回该端点的文件描述符 3.套接字本身是一个文件描述符,对应的是一个特殊的文件,该文件描述符维护了两个缓冲区&a…

什么是分段锁?

1、典型回答 分段锁是一种将锁细化到每个段(Segment) 级别的锁设计。在 ConcurrentHashMap 中,它将整个数据结构分成多个段,每个段只锁定自己的一部分数据。每个段可以看作是一个独立的分组,只锁定该段(Segment)内部的数据操作,不…

以题为例浅谈SSRF

什么是ssrf SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。 一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连…

C语言指针与数组(不适合初学者版):一篇文章带你深入了解指针与数组!

🎈个人主页:JAMES别扣了 💕在校大学生一枚。对IT有着极其浓厚的兴趣 ✨系列专栏目前为C语言初阶、后续会更新c语言的学习方法以及c题目分享. 😍希望我的文章对大家有着不一样的帮助,欢迎大家关注我,我也会回…

python 基础知识点(蓝桥杯python科目个人复习计划63)

今日复习内容:做题 例题1:蓝桥骑士 问题描述: 小蓝是蓝桥王国的骑士,他喜欢不断突破自我。 这天蓝桥国王给他安排了N个对手,他们的战力值分别为a1,a2,...,an,且按顺序阻挡在小蓝的前方。对于这些对手小…

Java NIO浅析

NIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的I/O模型,也是I/O多路复用的基础,已经被越来越多地应用到大型应用服务器,成为解决高并发与大量连接、I/O处理问题…

矿洞隧道漫游可视化:探索地心深处的奇幻世界

在这个充满好奇与探索的时代,我们总是渴望揭开世界的神秘面纱,探寻那些深藏在地球内部的奥秘。 矿洞隧道漫游可视化系统通过先进的计算机图形学、虚拟现实和三维建模技术,将矿洞隧道的真实场景进行高精度还原,让我们仿佛置身于一个…

leetcode判断子序列

本题中,我们可以删除原始字符串的一些字符但是不能改变其他字符的位置,这种求子序列的题都可以用动态规划来解决。 首先我们要确定dp数组的定义,这里我们将dp数组定义为dp[i][j] 表示以下标i-1为结尾的字符串s,和以下标j-1为结尾的…

Cadence PCB布线时的电源地操作

一般在布线时需要先将GND、3.3V、5V、24V电源和地等进行处理,使得在打开飞线后不至于太凌乱。 效果如下: 1. 方法如下: 之后打开飞线即可显示设置效果。 2. 至于如何删除??? 勾选delete,应用即…

如何选择多域名SSL证书?

多域名SSL证书,顾名思义,是一种特殊的SSL证书,它允许同时保护多个域名及其子域名的安全。与传统的单域名SSL证书相比,多域名SSL证书就像是一把万能钥匙,能够开启多个不同的锁,为多个网站提供一把坚固的安全…

【机器学习】机器学习是什么?用在哪里?怎么用?

1.机器学习是什么? 机器学习(Machine Learning)是人工智能的一个分支,它是一种通过对数据进行训练和学习,让计算机系统从中获取知识并改善性能的方法。简而言之,机器学习使计算机具有从数据中学习并自动改…

垃圾分类网站 |基于springboot框架+ Mysql+Java+B/S结构的垃圾分类网站 设计与实现(可运行源码+数据库+设计文档+部署说明)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 管理员功能登录前台功能效果图 系统功能设计 数据库E-R图设计 lunwen参考 摘要 研究…

重生奇迹mu元素合成流程

1、元素之魂是通过元素之心和艾丽亚之环合成的,在NPC阿德尼这里可以合成,NPC在精灵地图,而元素之心碎片和艾丽亚之环碎片的掉落也是在是在精灵地图。 2、玩家获得材料后,需经过2阶段的精炼才会成为可使用的元素之魂。各精炼阶段的…

在线动漫信息平台|基于springboot框架+ Mysql+Java+B/S架构的在线动漫信息平台设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 会员后台功能 管理员功能登录前台功能效果图 系统功能设计 数据库E-R图设计 lunwen…

Docker 哲学 - 容器操作

容器: 创建 停止 删除 强制删除(正在运行) run stop rm rm -f 列出本地容器: docker ps / docker container ls 镜像: search pull run : …

MySQL Connector连接失败之SSL connection error: protocol version mismatch

调用 mysql_real_connect() 连接失败,报错为ERROR 2026 (HY000): SSL connection error: protocol version mismatch 调用mysql_error()查看失败原因,结果为 SSL connection error: protocol version …

Bugku MISC做题笔记

简单套娃DX 这一题需要对png图片的结构有所了解。详细可参考https://www.w3.org/TR/png/ 幸好每一张图片只有一个错误,逐步调试,就可以发现所有错误,修正即可。具体错误参看python程序中的注释: import ossrc_dir .\\XD\\ de…

7-Eleven用工数字化:零售哲学下的人效管理实践

2014年,一本《零售的哲学》在中国掀起热潮,揭示了7-Eleven便利店的新零售坪效管理秘诀。而对大部分零售企业来说,劳动力效率是坪效背后的主要支柱。近期,国内领先的劳动力管理云服务提供商盖雅工场发布了《聚焦人效、重塑组织&…

香港理工大学主办!2024年第八届电力能源系统与应用国际会议(ICoPESA 2024)即将召开!

2024年第八届电力能源系统与应用国际会议(ICoPESA 2024) 2024年6月24日-26日 中国香港 ICoPESA 2024-Hong Kong (icpesa.org)https://icpesa.org/index.html 会议组织单位 会议出版及检索: 会议录用并注册的论文将由IEEE出版,…