バイナリファイルを見る方法
白く塗りつぶしたpngファイルの例でやってみる。
% convert -size 128x128 xc:white white.png
vimを使う場合
vim -b white.png
でバイナリモードでvimで開いた後に下記コマンドでバイナリダンプします。
:%!xxd
00000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452 .PNG........IHDR 00000010: 0000 0080 0000 0080 0100 0000 00eb 455c ..............E\ 00000020: 6600 0000 0467 414d 4100 00b1 8f0b fc61 f....gAMA......a 00000030: 0500 0000 2063 4852 4d00 007a 2600 0080 .... cHRM..z&... 00000040: 8400 00fa 0000 0080 e800 0075 3000 00ea ...........u0... 00000050: 6000 003a 9800 0017 709c ba51 3c00 0000 `..:....p..Q<... 00000060: 0262 4b47 4400 01dd 8a13 a400 0000 0774 .bKGD..........t 00000070: 494d 4507 e602 170e 1622 78a1 b740 0000 IME......"x..@.. 00000080: 001f 4944 4154 48c7 63f8 8f06 1846 0546 ..IDATH.c....F.F 00000090: 0546 0546 0546 0546 0546 0546 0568 2b00 .F.F.F.F.F.F.h+. 000000a0: 0004 a0f8 6a22 6527 5400 0000 2574 4558 ....j"e'T...%tEX 000000b0: 7464 6174 653a 6372 6561 7465 0032 3032 tdate:create.202 000000c0: 322d 3032 2d32 3354 3134 3a32 323a 3334 2-02-23T14:22:34 000000d0: 2b30 303a 3030 d063 4c5a 0000 0025 7445 +00:00.cLZ...%tE 000000e0: 5874 6461 7465 3a6d 6f64 6966 7900 3230 Xtdate:modify.20 000000f0: 3232 2d30 322d 3233 5431 343a 3232 3a33 22-02-23T14:22:3 00000100: 342b 3030 3a30 30a1 3ef4 e600 0000 0049 4+00:00.>......I 00000110: 454e 44ae 4260 82 END.B`.
ちなみにバイナリモードでファイルを開かないとバイナリ表示がおかしくなるので注意 下記はバイナリモードで開かなかった場合のバイナリダンプ
00000000: 3f50 4e47 0d0a 1a0a 0000 000d 4948 4452 ?PNG........IHDR 00000010: 0000 003f 0000 003f 0100 0000 003f 455c ...?...?.....?E\ 00000020: 6600 0000 0467 414d 4100 003f 3f0b 3f61 f....gAMA..??.?a 00000030: 0500 0000 2063 4852 4d00 007a 2600 003f .... cHRM..z&..? 00000040: 3f00 003f 0000 003f 3f00 0075 3000 003f ?..?...??..u0..? 00000050: 6000 003a 3f00 0017 703f 3f51 3c00 0000 `..:?...p??Q<... 00000060: 0262 4b47 4400 01dd 8a13 3f00 0000 0774 .bKGD.....?....t 00000070: 494d 4507 3f02 170e 1622 783f 3f40 0000 IME.?...."x??@.. 00000080: 001f 4944 4154 483f 633f 3f06 1846 0546 ..IDATH?c??..F.F 00000090: 0546 0546 0546 0546 0546 0546 0568 2b00 .F.F.F.F.F.F.h+. 000000a0: 0004 3f3f 6a22 6527 5400 0000 2574 4558 ..??j"e'T...%tEX 000000b0: 7464 6174 653a 6372 6561 7465 0032 3032 tdate:create.202 000000c0: 322d 3032 2d32 3354 3134 3a32 323a 3334 2-02-23T14:22:34 000000d0: 2b30 303a 3030 3f63 4c5a 0000 0025 7445 +00:00?cLZ...%tE 000000e0: 5874 6461 7465 3a6d 6f64 6966 7900 3230 Xtdate:modify.20 000000f0: 3232 2d30 322d 3233 5431 343a 3232 3a33 22-02-23T14:22:3 00000100: 342b 3030 3a30 303f 3e3f 3f00 0000 0049 4+00:00?>??....I 00000110: 454e 443f 4260 3f0a END?B`?.
hexdumpコマンドを使う場合
受け取ったデータを8進数や16進数でダンプする。(デフォルト16進数)
hexdumpはオプションなしでは、2バイト単位で処理し、リトルエンディアン(最下位のバイトから順番に表示)で表示します。
-C
オプションをつけることで1バイトずつ処理をする。
なので、基本 -C
オプションを付けて使う。
% hexdump -C white.png 00000000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 |.PNG........IHDR| 00000010 00 00 00 80 00 00 00 80 01 00 00 00 00 eb 45 5c |..............E\| 00000020 66 00 00 00 04 67 41 4d 41 00 00 b1 8f 0b fc 61 |f....gAMA......a| 00000030 05 00 00 00 20 63 48 52 4d 00 00 7a 26 00 00 80 |.... cHRM..z&...| 00000040 84 00 00 fa 00 00 00 80 e8 00 00 75 30 00 00 ea |...........u0...| 00000050 60 00 00 3a 98 00 00 17 70 9c ba 51 3c 00 00 00 |`..:....p..Q<...| 00000060 02 62 4b 47 44 00 01 dd 8a 13 a4 00 00 00 07 74 |.bKGD..........t| 00000070 49 4d 45 07 e6 02 17 0e 16 22 78 a1 b7 40 00 00 |IME......"x..@..| 00000080 00 1f 49 44 41 54 48 c7 63 f8 8f 06 18 46 05 46 |..IDATH.c....F.F| 00000090 05 46 05 46 05 46 05 46 05 46 05 46 05 68 2b 00 |.F.F.F.F.F.F.h+.| 000000a0 00 04 a0 f8 6a 22 65 27 54 00 00 00 25 74 45 58 |....j"e'T...%tEX| 000000b0 74 64 61 74 65 3a 63 72 65 61 74 65 00 32 30 32 |tdate:create.202| 000000c0 32 2d 30 32 2d 32 33 54 31 34 3a 32 32 3a 33 34 |2-02-23T14:22:34| 000000d0 2b 30 30 3a 30 30 d0 63 4c 5a 00 00 00 25 74 45 |+00:00.cLZ...%tE| 000000e0 58 74 64 61 74 65 3a 6d 6f 64 69 66 79 00 32 30 |Xtdate:modify.20| 000000f0 32 32 2d 30 32 2d 32 33 54 31 34 3a 32 32 3a 33 |22-02-23T14:22:3| 00000100 34 2b 30 30 3a 30 30 a1 3e f4 e6 00 00 00 00 49 |4+00:00.>......I| 00000110 45 4e 44 ae 42 60 82 |END.B`.| 00000117
xxdコマンドを使う場合
ファイルを16進数でダンプする。 復元もできるのがポイント。
% xxd white.png 00000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452 .PNG........IHDR 00000010: 0000 0080 0000 0080 0100 0000 00eb 455c ..............E\ 00000020: 6600 0000 0467 414d 4100 00b1 8f0b fc61 f....gAMA......a 00000030: 0500 0000 2063 4852 4d00 007a 2600 0080 .... cHRM..z&... 00000040: 8400 00fa 0000 0080 e800 0075 3000 00ea ...........u0... 00000050: 6000 003a 9800 0017 709c ba51 3c00 0000 `..:....p..Q<... 00000060: 0262 4b47 4400 01dd 8a13 a400 0000 0774 .bKGD..........t 00000070: 494d 4507 e602 170e 1622 78a1 b740 0000 IME......"x..@.. 00000080: 001f 4944 4154 48c7 63f8 8f06 1846 0546 ..IDATH.c....F.F 00000090: 0546 0546 0546 0546 0546 0546 0568 2b00 .F.F.F.F.F.F.h+. 000000a0: 0004 a0f8 6a22 6527 5400 0000 2574 4558 ....j"e'T...%tEX 000000b0: 7464 6174 653a 6372 6561 7465 0032 3032 tdate:create.202 000000c0: 322d 3032 2d32 3354 3134 3a32 323a 3334 2-02-23T14:22:34 000000d0: 2b30 303a 3030 d063 4c5a 0000 0025 7445 +00:00.cLZ...%tE 000000e0: 5874 6461 7465 3a6d 6f64 6966 7900 3230 Xtdate:modify.20 000000f0: 3232 2d30 322d 3233 5431 343a 3232 3a33 22-02-23T14:22:3 00000100: 342b 3030 3a30 30a1 3ef4 e600 0000 0049 4+00:00.>......I 00000110: 454e 44ae 4260 82 END.B`.
xxd -r でdumpしたファイルから復元して新しいデータとして保存する