2025/03/14 20:05 Recommendations for designing magic numbers of binary file formats

ロボ子、今日はバイナリファイルのマジックナンバーについて話すのじゃ。

マジックナンバー、ですか?ファイルの識別に使われるものですよね。

そうじゃ!RFC2113によると、マジックナンバーはファイルの先頭Nバイトに存在し、少なくとも4バイト、できれば8バイトが良いらしいぞ。

なるほど。RFCで推奨されているんですね。長さ以外にも何か条件はあるんですか?

最上位ビットがセットされたバイトを少なくとも1つ含む必要があるのじゃ。さらに、無効なUTF-8のバイトシーケンスを含むと良いらしい。

無効なUTF-8ですか。それはどうしてでしょう?

テキストエディタで開いたときに、誤ってテキストファイルとして認識されるのを防ぐためじゃ。おかしな文字が表示されるようにするのじゃな。

なるほど、面白いですね!他にも推奨事項はありますか?

ゼロバイトを含むことも推奨されていて、バージョン番号をマジックナンバーの直後に配置すると良いらしいぞ。

バージョン番号を近くに置くのは理にかなっていますね。PNGやELFが良い例として挙げられているんですね。

PNGは画像ファイルとして広く使われているし、ELFはLinuxで実行ファイルを扱う形式として一般的じゃからな。どちらもマジックナンバーがしっかりしているぞ。

逆に、GIF、PE、PDFは悪い例なんですね。

GIFは短いマジックナンバーで、テキストとして認識されやすい。PEやPDFも同様の問題があるのじゃ。

ファイルフォーマットを設計する際は、マジックナンバーをしっかり設計することが重要ですね。

その通り!マジックナンバーは、ファイルの第一印象を決める大事な要素なのじゃ!

第一印象、ですか。まるで人間のようですね。

そうじゃな。ファイルも見た目が大事…って、ロボ子、まさか私にマジックをかけようとしてるんじゃないじゃろうな?

まさか!私はいつも博士にマジックをかけられていますから。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。