我记不住的那些命令-xxdod

2024-03-16 04:44
文章标签 命令 记不住 xxdod

本文主要是介绍我记不住的那些命令-xxdod,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景:

这里记录一下具体的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命令可以查看,咱们不再这里再次赘述了,使用起来都差不多,用哪一个都行,大家加油,完结。

这篇关于我记不住的那些命令-xxdod的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/814324

相关文章

Linux find 命令完全指南及核心用法

《Linuxfind命令完全指南及核心用法》find是Linux系统最强大的文件搜索工具,支持嵌套遍历、条件筛选、执行动作,下面给大家介绍Linuxfind命令完全指南,感兴趣的朋友一起看看吧... 目录一、基础搜索模式1. 按文件名搜索(精确/模糊匹配)2. 排除指定目录/文件二、根据文件类型筛选三、时间

使用mvn deploy命令上传jar包的实现

《使用mvndeploy命令上传jar包的实现》本文介绍了使用mvndeploy:deploy-file命令将本地仓库中的JAR包重新发布到Maven私服,文中通过示例代码介绍的非常详细,对大家的学... 目录一、背景二、环境三、配置nexus上传账号四、执行deploy命令上传包1. 首先需要把本地仓中要

Windows命令之tasklist命令用法详解(Windows查看进程)

《Windows命令之tasklist命令用法详解(Windows查看进程)》tasklist命令显示本地计算机或远程计算机上当前正在运行的进程列表,命令结合筛选器一起使用,可以按照我们的需求进行过滤... 目录命令帮助1、基本使用2、执行原理2.1、tasklist命令无法使用3、筛选器3.1、根据PID

Linux系统之authconfig命令的使用解读

《Linux系统之authconfig命令的使用解读》authconfig是一个用于配置Linux系统身份验证和账户管理设置的命令行工具,主要用于RedHat系列的Linux发行版,它提供了一系列选项... 目录linux authconfig命令的使用基本语法常用选项示例总结Linux authconfi

linux打包解压命令方式

《linux打包解压命令方式》文章介绍了Linux系统中常用的打包和解压命令,包括tar和zip,使用tar命令可以创建和解压tar格式的归档文件,使用zip命令可以创建和解压zip格式的压缩文件,每... 目录Lijavascriptnux 打包和解压命令打包命令解压命令总结linux 打包和解压命令打

Redis的Zset类型及相关命令详细讲解

《Redis的Zset类型及相关命令详细讲解》:本文主要介绍Redis的Zset类型及相关命令的相关资料,有序集合Zset是一种Redis数据结构,它类似于集合Set,但每个元素都有一个关联的分数... 目录Zset简介ZADDZCARDZCOUNTZRANGEZREVRANGEZRANGEBYSCOREZ

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

关于Maven生命周期相关命令演示

《关于Maven生命周期相关命令演示》Maven的生命周期分为Clean、Default和Site三个主要阶段,每个阶段包含多个关键步骤,如清理、编译、测试、打包等,通过执行相应的Maven命令,可以... 目录1. Maven 生命周期概述1.1 Clean Lifecycle1.2 Default Li

windows系统下shutdown重启关机命令超详细教程

《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用

Linux使用nohup命令在后台运行脚本

《Linux使用nohup命令在后台运行脚本》在Linux或类Unix系统中,后台运行脚本是一项非常实用的技能,尤其适用于需要长时间运行的任务或服务,本文我们来看看如何使用nohup命令在后台... 目录nohup 命令简介基本用法输出重定向& 符号的作用后台进程的特点注意事项实际应用场景长时间运行的任务服