CubicLouve

Spring_MTの技術ブログ

バイナリファイルを見る方法

白く塗りつぶした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したファイルから復元して新しいデータとして保存する