マジックナンバー_(フォーマット識別子)
[Wikipedia|▼Menu]

マジックナンバーとは、ファイルなどオブジェクト類の形式を識別するもの、フォーマット識別子のことである[1]

なお、本項内でのマジックナンバーの具体的な値の表記には、特記無い限り16進表記を用いる。
概要

フォーマット識別子としてのマジックナンバーとは、ファイルの種類を識別するのに使われるファイル本文中の(内容中の)特定の位置にある特定の数値のことである。ファイルの種類を識別する方法としてはファイルの拡張子や属性値(プロパティ)を使う場合もあるが、マジックナンバーとはそれらのことではなく、ファイルの本文中に表れる特定の数値のことである。ほとんどの場合、マジックナンバーはファイルの先頭に位置し、数バイト程度である。

また、ファイル以外にもデータ構造を持ったオブジェクト全般、例えば、マスターブートレコードでのファイルシステムの種類を表す識別子なども、マジックナンバーと呼ばれている。

歴史を辿るとマジックナンバーは、PDP-11のヘッダ部分に配置されている、データをスキップしてプログラムの開始位置にジャンプするインストラクションコードを意味していた[1]。例えば、ファイルの冒頭の1ワード(PDP-11は16ビットワードマシン)がリトルエンディアンの8進数で0407 である場合、PDP-11の命令コードとしては相対アドレス指定の無条件分岐 0400 を意味し、8ワード先(オフセットビットの 07 は命令コードの位置を起点とするために、命令コード自体の1ワードを加算して8ワード先)にジャンプする命令となる。後にa.outフォーマットのマジックナンバーの一つO_MAGICとして認識されるようになった。
オペレーティングシステムのマジックナンバー
Unix系

Unix系オペレーティングシステムには複数の実行形式のバイナリフォーマットがある。a.outCOFFELFなどである。Unix系オペレーティングシステムが実行ファイルを実行する際、それがテキストファイルであればシェルスクリプトと見なしてシェルを呼び出し(さらにシェルは、そのファイルが「#!」で始まっていればそれに後続して示されるアプリケーションを呼び出し)、そうでない場合はその実行ファイルを前述のようなバイナリ形式であると判断して直接呼び出すが、この際のファイル形式の判断にもマジックナンバーが用いられている。

このような仕組みから、Unix系オペレーティングシステムでは起動方法を切り替える仕組みをフックすることで、初期状態ではサポートされていないファイル形式の実行バイナリを実行することも可能となっている。例えば、BSD系での互換レイヤーLinux互換レイヤーやSVR4互換レイヤーなど)、BSD系でのWin32カーネル互換パッケージの PEACE[2] などは、この機能の実現例である。これが実現可能であるのは、マジックナンバーやマジックナンバーに後続するフラグ類によって判断しているからである。

BSD系もLinuxもELFバイナリが用いられており、マジックナンバーは 「7F ELF」と共通であるが、両者を区別可能なオプションとして、7バイト目にどのオペレーティングシステム向けのELFバイナリであるかが格納されている。例えば、FreeBSDであれば「09」、NetBSDであれば「02」、Linuxであれば「03」などである。
Windows系

MS-DOSWindows オペレーティングシステムで使われる実行形式のバイナリーフォーマットには、COMフォーマットEXEフォーマットの二種類があるが、EXEフォーマットは、COMフォーマットと区別するために、ファイルの先頭が 4D 5A というマジックナンバーになっている。
アプリケーションソフトのマジックナンバー

アプリケーションでも、バイナリファイルの冒頭付近に他のアプリケーション用のファイルと区別可能なマジックナンバーを設けることは一般的であり、他のアプリケーション用のファイルが読み込まれた場合の誤動作防止のためのチェック用コードとして機能している。
Microsoft Office データファイル
ファイルの先頭から8バイトの「D0 CF 11 E0 A1 B1 1A E1」など(何種類か存在する)がマジックナンバーである。
gzip 圧縮ファイル
ファイルの先頭から2バイトの「1F 8B」がマジックナンバーである。
Javaクラスファイル
Java仮想マシンのプログラムコードは、ファイルとしてはJavaクラスファイルとして保存されているが、Javaクラスファイルの先頭の4バイトは CA FE BA BE というマジックナンバーになっている。

また、将来、ファイル形式の拡張が必要となる時のために、マジックナンバーにバージョン番号を含めておくこともしばしば行われる。
LHA
ファイルの3バイト目からの5バイトがマジックナンバーに相当し、「-lh0-」や「-lh4-」などのように中の3バイトがLZH形式の形式名称と一致する。
PDF
ファイルの先頭から5バイトが「%PDF-」となっているが、それにバージョン番号が後続する。

WindowsやMacintoshではマジックナンバーを参照することに特化したアプリケーションはオペレーティングシステムに付属されていないため、このような情報を利用者が参照することはあまりない。ただし、誤った拡張子が付与されているために正しいアプリケーションが開けなくなったファイルの拡張子を補正するようなソフトウェアは、マジックナンバーを参照して本来のファイル形式を判断している。


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:16 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef