温故知新: バイナリエディタ dd2008年10月20日 10時07分56秒

ここで言う dd とは、「convert and copy a file」の dd だ。つまり、dd if=/dev/zero of=file/device bs=1M 等と、良くデバイスに対する書き込みの手段として使うアレだ。

今回、バイナリファイルを入力とし、それをネットワークに送り出すプログラムを手に入れた。しかし、困ったのは入力が、バイナリ形式とのこと。ファイルには、機械形式の数字やら文字列のビット並びが記されている。そして、送られる構造体の形は大体分かるだが、それにヘッダが付くのかどうかは一切不明だった。

運良く、その構造体を持ったデータを持っている人がいたので、ファイルは譲り受けた。しかし、そのままでは使えない。

少し古めの Sun のシステムで、特定のプログラムを動かす程度にしか使われないから、使いやすいユーティリティなどは、ほとんど入っていない。そこで、バイナリエディタが必要になった。

そこで、思い付いたのが、dd。cat や head 等では、意図したバイトを指定出来ない。そして、ファイルリダイレクトを用いても、表示できない文字は壊れてしまう。その点、dd なら bs を用いて一バイト毎に読み書きをするように指定できる。また、seek や skip 系のオプションを指定することにより、特定の位置に書き込むことが出来る。

dd を用いて、ヘッダの有るものと無いものを作って試し、動作を見てヘッダが必要無いのを確認した。その後、文字列を含む場所が、不正な値だったので、そこの部分を dd を用いて編集した。

数十バイト程度で、元となるデータを入試出来たのも今回の成功の大きな一因だろう。dd で比較的簡単に処理できたのが随分と助かった。そうでなければ、システムを立ち上げ、各種プログラムとデータを準備して、たった一つのデータを捕捉しなければいけないところだった。これは勿論、手間の掛かる作業だ。