ぱたへね

はてなダイアリーはrustの色分けができないのでこっちに来た

JPEGファイルを目grepする。

元ネタはこちら。
http://www.slideshare.net/murachue/grep-8057239
バイナリを見て文字コードを識別する話がおもしろかったです。私も持ちネタを一つ公開します。他にもあるはずですので、みんなでネタを持ち寄りましょう。

タイトルの通りJPEGファイルの見分け方です。組み込みの世界では、JPEGエンコーダはヘッダーファイルをつけてくれない事が多く、DMA転送の対象にもなりやすいので、データの並びを見てJEPGかどうか判断できると非常に便利です。俺の大事なデータ領域が跡形もなく上書きされた時の犯人追及、またはどこかにDMA転送されてしまったJPEGデータの書き込み先を探すのに必須のテクニックです。

基本的には圧縮されたフォーマットですので、同じようなデータの繰り返しはありません。ところがJPEGの場合、16進で FF 00 という並びが、他のバイト列よりも頻繁に出てきます。

実際のデータはこんな感じです。

フォーマット辞典JPEG編に簡単な解説があります。JPEGのフォーマットは、FFから始まる2バイトをマーカとして特別扱いします。そうすると画像データの中にFFがデータとして登場したときに、データなのかマーカなのか分からなくなります。そこでJPEGのフォーマットでは、データの中にFFが出てきた場合、FF00として他のマーカと区別をします。そのために圧縮データにもかかわらず、FF00の並びが高い頻度で見つかります。FF00の並びだけ色を変えるツールがあれば完璧ですね。