Binp - Binary Parser
バイナリファイルからデータを抽出するツール。
offset
, size
type
, endianness
を指定して、バイナリファイルのどこからどこまでをどのように解釈するかを指定できる。
使い方
Usage: binp [options] FILE
-c, --config VALUE 設定ファイルパス
-a, --all name, value 以外のすべての項目(endianness, offset, size, type)を表示する
-p, --polling VALUE 指定したポーリング間隔(ミリ秒)で再表示します
-w, --watch ファイル更新時に再表示します
以下内容のバイナリファイルをパースする場合について説明する。
■ example.bin
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+-------+
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+-------+
| 00 | 00 | 00 | 00 | 00 | 00 | 00 | 01 | 00 | 00 | 00 | 01 | 00 | 01 | 01 |
+---------------------------------------+-------------------+---------+-------+
| UINT64 | UINT32 | UINT16 | UINT8 |
+---------------------------------------+-------------------+---------+-------+
※ エンディアンはリトルエンディアン
以下のように、設定ファイルに name
, offset
, size
, type
を記述する。
■ setting.yaml
- name: UINT64_value
offset: 0
size: 8
type: UINT64
endianness: LITTLE
- name: UINT32_value
offset: 8
size: 4
type: UINT32
endianness: LITTLE
- name: UINT16_value
offset: 12
size: 2
type: UINT16
endianness: LITTLE
- name: UINT8_value
offset: 14
size: 1
type: UINT8
endianness: LITTLE
binary_parser.rb
に設定ファイルとバイナリファイルを指定して実行する。
実行結果は以下のようになる。
$ ruby binary_parser.rb -c setting.yaml example.bin
+--------------+-------------------+
| name | value |
+--------------+-------------------+
| UINT64_value | 72057594037927936 |
| UINT32_value | 16777216 |
| UINT16_value | 256 |
| UINT8_value | 1 |
+--------------+-------------------+
-a
オプションで追加の情報が出力される。
$ ruby binary_parser.rb -a -c setting.yaml example.bin
+------------+--------------+--------+------+--------+-------------------+
| endianness | name | offset | size | type | value |
+------------+--------------+--------+------+--------+-------------------+
| LITTLE | UINT64_value | 0 | 8 | UINT64 | 72057594037927936 |
| LITTLE | UINT32_value | 8 | 4 | UINT32 | 16777216 |
| LITTLE | UINT16_value | 12 | 2 | UINT16 | 256 |
| LITTLE | UINT8_value | 14 | 1 | UINT8 | 1 |
+------------+--------------+--------+------+--------+-------------------+
TODO:
- [x] : テーブル形式で表示
- [ ] : 文字列型サポート
- [ ] : UTF8
- [x] : ビットフラグサポート
- [ ] : type からの size 自動設定
- [ ] : json 形式で表示