Linux系统调用学习——XXD
xxd命令主要功能
xxd命令主要用来查看文件对应的十六进制形式,也可以将文件对应的十六进制形式输出到一个指定的文件。
使用此命令所支持的特有选项,亦可以以二进制的形式查看文件。
常用选项:
(1)-a : 它的作用是自动跳过空白内容,默认是关闭的(但实践后发现没有效果)
(2)-c : 它的后面加上数字表示每行显示多少字节的十六进制数,默认是16bytes,最大是256bytes
(3)-g : 设定以几个字节为一块,默认为2bytes
(4)-l : 它的后面加上数字表示显示多少字节的内容
(5)-s : 后面接【+-】和address。“+”表示从地址处开始的内容,“-”表示距末尾address开始的内容
(6)-b : 以二进制(0 or 1)的形式查看文件内容
(7)-r: 反向操作:将hexdump转换(或patch)成二进制。 如果不写入 stdout,xxd 将写入其输出文件而不截断它。 使用组合 -r -p 读取没有行号信息和特定列布局的纯十六进制转储。 任何地方都允许额外的空格和换行符。
xxd命令实践
xxd基本功能(不带参数)
-a
发现并没有跳过空白内容,猜测是不是和sort中-b有类似原因
-c
-c参数后接数字表示每行显示多少字节的十六进制数
-v
显示版本
-l
显示多少字节的内容
-b
以二进制形式查看文件内容
-i
使用C语言文件样式输出
推导xxd实现过程
man XXD
man 1 XXD
查看帮助文档
examples
see also
因为功能类似,可以类比之前所学习的od命令。由xxd功能可知一定会需要用到open,read,write,close系统调用,
xxd实现伪代码
首先需要用open系统调用打开一个文件,并得到fd,如果fd小于0则意味着文件打开失败。
之后是读文件,读文件内容多少需要由用户输入参数提供,系统提供缺省默认值。
在读文件的过程中写个循环,将read函数返回值作为文件字符数,此后计算每个字符的16进制对应地址并按照格式用write系统调用输出到屏幕
最后关闭文件。
(以上是最基本的xxd功能,其他参数功能的实现仅需增加一个命令行传入参数字符串的比较,并增添对应模块)
伪代码可参照之前myod代码最基本模块,功能相同。