ToB企服应用市场:ToB评测及商务社交产业平台

标题: Linux 常用下令 - hexdump 【以指定格式体现文件内容】 [打印本页]

作者: 伤心客    时间: 2024-9-6 05:45
标题: Linux 常用下令 - hexdump 【以指定格式体现文件内容】
简介

hexdump 可以将指定文件或标准输入按照指定的格式进行输出,其可以用来检察任何文件的原始数据,在分析非文本文件的场景下非常有用。
使用方式

  1. hexdump [-bcCdovx] [-e 指定格式] [-f 指定文件] [-n 长度] [-s 偏移] file ...
  2. hd [-bcdovx] [-e 指定格式] [-f 指定文件] [-n 长度] [-s 偏移] file ...
复制代码
常用选项


格式 (Formats)

格式字符串可以包含恣意数量的格式单元,使用空格分隔。一个单元包含最多三个部分:迭代计数,字节计数以及格式。
迭代计数是一个可选的正整数,默认为 1。每个格式都会应用相应的次数。
字节计数是一个可选的正整数,假如指定了字节计数,则其将定义每次迭代格式时要解析的字节数。
假如指定了迭代计数或字节计数,则必须在迭代计数或(和)字节计数前加一个 / 来进行区分。而且 / 前后的空白字符会被忽略。
格式部分是必须的,且必须用双引号括起来。格式会被解析为 fprintf 风格的字符串,不过存在以下特殊环境:

hexdump 还支持以下额外的转换字符:
_a[dox]:体现下一个要体现的字节在输入文件中的偏移量,累计计算所有输入文件的偏移量。追加的字符 d,o,x 分别指定为十进制,八进制或十六进制体现。
_A[dox]:与 _a 转换字符串相同,但只在所有输入数据处理处罚完后实验一次。
_c:以默认字符集输出字符。非打印字符体现为三个字符的八进制表示,可以用标准转义符号表示的字符体现为两个字符的字符串。
_p:以默认字符集输出字符,非打印字符体现为单独的 . 。
_u: 输出 US ASCII 字符,控制字符按照以下小写名称体现,大于 0xff 的字符以十六进制字符串体现:
  1. 000 NUL  001 SOH  002 STX  003 ETX  004 EOT  005 ENQ
  2. 006 ACK  007 BEL  008 BS   009 HT   00A LF   00B VT
  3. 00C FF   00D CR   00E SO   00F SI   010 DLE  011 DC1
  4. 012 DC2  013 DC3  014 DC4  015 NAK  016 SYN  017 ETB
  5. 018 CAN  019 EM   01A SUB  01B ESC  01C FS   01D GS
  6. 01E RS   01F US   07F DEL
复制代码
各转换字符的默认字节计数与其支持的字节计数如下:
转换字符默认及支持的字节计数%_c, %_p, %_u, %c仅支持1字节%d, %i, %o, %u, %X, %x默认4字节, 支持1,2,4字节%E, %e, %f, %G, %g默认8字节,支持4,12字节 每个格式字符串解析的数据量是各个格式单元所需数据量的总和。详细来说,每个格式单元的数据量就等于迭代次数乘以字节计数。假如未指定字节计数,则等于迭代次数乘以该格式单元默认所需要的字节数。
输入数据以 “块” 的情势处理处罚,这个块的大小被定义为恣意格式字符串制定的最大数据量。对于解析数据量小于一个输入块的格式字符串,其末了一个格式单元既解析了一些字节数又没有指定迭代次数的环境下,这些格式单元的迭代次数会增加,直到整个输入块都被处理处罚完,大概块中剩余数据不敷以满意格式字符串的要求。
假如由于用户指定大概 hexdump 自动修改了迭代次数(如上文所述)而使得迭代次数大于1,则在末了一次迭代时不会输出尾随的空白字符。
当输入数据量不敷以满意格式字符串的要求时,hexdump 会用零填充剩余部分,以便格式字符串能够完整地体现所有可用的数据。
由上述情形导致的额外输出都将被替换为等量的空格。“等量的空格” 是根据原始转换字符或转换字符串(去掉 +, ,# 这些转换标志)的字段宽度和精度来决定的。
参考示例

1. 以默认情势输出文件内容

  1. hexdump test.c
复制代码
以默认输特别式体现 test.c 的文件内容:
  1. jay@jaylinuxlenovo:~/test$ hexdump test.c
  2. 0000000 6923 636e 756c 6564 3c20 7473 6964 2e6f0000010 3e68 230a 6e69 6c63 6475 2065 733c 72740000020 6e69 2e67 3e68 230a 6e69 6c63 6475 20650000030 733c 6474 6e69 2e74 3e68 0a0a 6975 746e0000040 5f38 2074 6574 7473 615f 7272 7961 5d5b0000050 3d20 7b20 7830 3034 202c 7830 3034 202c0000060 2c30 3020 3b7d 690a 746e 6d20 6961 286e0000070 2029 0a7b 2020 2020 6e69 2074 2069 203d0000080 3b30 200a 2020 6920 746e 6a20 3d20 30200000090 0a3b 200a 2020 6920 313d 0a3b 2020 202000000a0 3d6a 2b69 3b2b 200a 2020 7020 6972 746e00000b0 2866 6922 203a 6425 202c 3a6a 2520 5c6400000c0 226e 202c 2c69 6a20 3b29 0a0a 2020 202000000d0 6572 7574 6e72 3020 0a3b 007d          00000db
复制代码
2. 以八进制情势体现文件内容

  1. hexdump -b test.c
复制代码
使用 -b 选项可以以八进制格式输出:
  1. jay@jaylinuxlenovo:~/test$ hexdump -b test.c
  2. 0000000 043 151 156 143 154 165 144 145 040 074 163 164 144 151 157 0560000010 150 076 012 043 151 156 143 154 165 144 145 040 074 163 164 1620000020 151 156 147 056 150 076 012 043 151 156 143 154 165 144 145 0400000030 074 163 164 144 151 156 164 056 150 076 012 012 165 151 156 1640000040 070 137 164 040 164 145 163 164 137 141 162 162 141 171 133 1350000050 040 075 040 173 060 170 064 060 054 040 060 170 064 060 054 0400000060 060 054 040 060 175 073 012 151 156 164 040 155 141 151 156 0500000070 051 040 173 012 040 040 040 040 151 156 164 040 151 040 075 0400000080 060 073 012 040 040 040 040 151 156 164 040 152 040 075 040 0600000090 073 012 012 040 040 040 040 151 075 061 073 012 040 040 040 04000000a0 152 075 151 053 053 073 012 040 040 040 040 160 162 151 156 16400000b0 146 050 042 151 072 040 045 144 054 040 152 072 040 045 144 13400000c0 156 042 054 040 151 054 040 152 051 073 012 012 040 040 040 04000000d0 162 145 164 165 162 156 040 060 073 012 175                    00000db
复制代码
3. 以字符情势体现文件内容

  1. hexdump -c test.c
复制代码
使用 -c 选项可以以 ASCII 字符情势体现文件内容:
  1. jay@jaylinuxlenovo:~/test$ hexdump -c test.c
  2. 0000000   #   i   n   c   l   u   d   e       <   s   t   d   i   o   .0000010   h   >  \n   #   i   n   c   l   u   d   e       <   s   t   r0000020   i   n   g   .   h   >  \n   #   i   n   c   l   u   d   e    0000030   <   s   t   d   i   n   t   .   h   >  \n  \n   u   i   n   t0000040   8   _   t       t   e   s   t   _   a   r   r   a   y   [   ]0000050       =       {   0   x   4   0   ,       0   x   4   0   ,    0000060   0   ,       0   }   ;  \n   i   n   t       m   a   i   n   (0000070   )       {  \n                   i   n   t       i       =    0000080   0   ;  \n                   i   n   t       j       =       00000090   ;  \n  \n                   i   =   1   ;  \n                00000a0   j   =   i   +   +   ;  \n                   p   r   i   n   t00000b0   f   (   "   i   :       %   d   ,       j   :       %   d   \00000c0   n   "   ,       i   ,       j   )   ;  \n  \n                00000d0   r   e   t   u   r   n       0   ;  \n   }                    00000db
复制代码
4. 以十六进制与 ASCII 混淆模式体现文件内容

  1. hexdump -C test.c
复制代码
使用 -C 选项可以以 十六进制与 ASCII 混淆模式体现文件内容:
  1. jay@jaylinuxlenovo:~/test$ hexdump -C test.c
  2. 00000000  23 69 6e 63 6c 75 64 65  20 3c 73 74 64 69 6f 2e  |#include <stdio.|00000010  68 3e 0a 23 69 6e 63 6c  75 64 65 20 3c 73 74 72  |h>.#include <str|00000020  69 6e 67 2e 68 3e 0a 23  69 6e 63 6c 75 64 65 20  |ing.h>.#include |00000030  3c 73 74 64 69 6e 74 2e  68 3e 0a 0a 75 69 6e 74  |<stdint.h>..uint|00000040  38 5f 74 20 74 65 73 74  5f 61 72 72 61 79 5b 5d  |8_t test_array[]|00000050  20 3d 20 7b 30 78 34 30  2c 20 30 78 34 30 2c 20  | = {0x40, 0x40, |00000060  30 2c 20 30 7d 3b 0a 69  6e 74 20 6d 61 69 6e 28  |0, 0};.int main(|00000070  29 20 7b 0a 20 20 20 20  69 6e 74 20 69 20 3d 20  |) {.    int i = |00000080  30 3b 0a 20 20 20 20 69  6e 74 20 6a 20 3d 20 30  |0;.    int j = 0|00000090  3b 0a 0a 20 20 20 20 69  3d 31 3b 0a 20 20 20 20  |;..    i=1;.    |000000a0  6a 3d 69 2b 2b 3b 0a 20  20 20 20 70 72 69 6e 74  |j=i++;.    print|000000b0  66 28 22 69 3a 20 25 64  2c 20 6a 3a 20 25 64 5c  |f("i: %d, j: %d\|000000c0  6e 22 2c 20 69 2c 20 6a  29 3b 0a 0a 20 20 20 20  |n", i, j);..    |000000d0  72 65 74 75 72 6e 20 30  3b 0a 7d                 |return 0;.}|000000db
复制代码
5. 只体现指定字节数的文件内容

  1. hexdump -n 16 test.c
复制代码
使用 -n 选项指定体现 test.c 的前 16 个字节内容:
  1. jay@jaylinuxlenovo:~/test$ hexdump -n 16 test.c
  2. 0000000 6923 636e 756c 6564 3c20 7473 6964 2e6f0000010
复制代码
6. 从指定字节偏移量开始体现文件内容

  1. hexdump -s 16 test.c
复制代码
使用 -s 指定从文件的第 16 个字节开始体现内容:
  1. jay@jaylinuxlenovo:~/test$ hexdump -s 16 test.c
  2. 0000010 3e68 230a 6e69 6c63 6475 2065 733c 72740000020 6e69 2e67 3e68 230a 6e69 6c63 6475 20650000030 733c 6474 6e69 2e74 3e68 0a0a 6975 746e0000040 5f38 2074 6574 7473 615f 7272 7961 5d5b0000050 3d20 7b20 7830 3034 202c 7830 3034 202c0000060 2c30 3020 3b7d 690a 746e 6d20 6961 286e0000070 2029 0a7b 2020 2020 6e69 2074 2069 203d0000080 3b30 200a 2020 6920 746e 6a20 3d20 30200000090 0a3b 200a 2020 6920 313d 0a3b 2020 202000000a0 3d6a 2b69 3b2b 200a 2020 7020 6972 746e00000b0 2866 6922 203a 6425 202c 3a6a 2520 5c6400000c0 226e 202c 2c69 6a20 3b29 0a0a 2020 202000000d0 6572 7574 6e72 3020 0a3b 007d          00000db
复制代码
留意事项



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4