マジックナンバー (フォーマット識別子)とは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > 百科事典 > マジックナンバー (フォーマット識別子)の意味・解説 

マジックナンバー (フォーマット識別子)

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/11/11 05:47 UTC 版)

ナビゲーションに移動 検索に移動

マジックナンバーとは、ファイルなどオブジェクト類の形式を識別するもの、フォーマット識別子のことである[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ではマジックナンバーを参照することに特化したアプリケーションはオペレーティングシステムに付属されていないため、このような情報を利用者が参照することはあまりない。ただし、誤った拡張子が付与されているために正しいアプリケーションが開けなくなったファイルの拡張子を補正するようなソフトウェアは、マジックナンバーを参照して本来のファイル形式を判断している。なお、ファイル偽装されたファイルの復元アプリケーションではマジックナンバー以外の情報も参照しているが、ここでは単に拡張子が別のものに変わってしまったようなケースを想定して説明している。

マスターブートレコードのマジックナンバー

マスターブートレコードのパーティションテーブルには、パーティションの種類を示す情報、パーティション識別子が含まれている。例えばFAT32であれば 0BNTFSであれば 07、 FreeBSD のFFSであれば A5 などである。この情報はファイルシステムのフォーマット識別子とも言える。

一部のオペレーティングシステムでは、パーティション識別子の付与とフォーマットを同タイミングで行うため、この両者は一致する。Windowsでは、パーティションの作成(パーティションサイズの決定)は独立操作であるが、パーティション識別子の付与とフォーマットは単一の操作であり、同タイミングで行われる。

一方、パーティション識別子の付与とフォーマットを行うタイミングが異なり、パーティション識別子と無関係の形式でフォーマットを行うことが可能なオペレーティングシステムも存在する。これは、複数のフォーマット形式に対応したPC-UNIX全般について言える。例えば FreeBSD では、パーティション識別子の付与は fdisk コマンドの実行時に行われ、フォーマットは newfsnewfs_msdos で行うこととなるが、これらのフォーマットコマンドはパーティション識別子とは無関係に実行することが可能である。そのため、FAT32の識別子を付けた状態でUFSフォーマットを行うことも可能である。Linuxでも、フォーマットコマンドが「mkfs.ext4」や「mkfs.vfat」や「mkfs -t msdos」などに変わる以外、事情は同じである。このようにして作成されたパーティションは、パーティション識別子を信じて動作するソフトウェアでは使用することができず、誤動作防止用のチェック機能も正しくは働かない。LinuxやFreeBSDのようにmount コマンドでのマウント時にパーティション識別子と無関係にフォーマット形式を指定可能なオペレーティングシステムでのみ使用可能である。

その他

ジャーゴンファイルでは、「既存のファイル形式と重ならないように、新しい番号をどのように決めれば良いか」「簡単である。ランダムに決めれば良い」「まさしくマジック(手品)である」と取り上げられている[1]

脚注

  1. ^ a b c Jargon File - magic number”. 2009年11月9日閲覧。 - ジャーゴンファイルではコンピュータ関連の4種類のマジックナンバーが示されており、本項のマジックナンバーは左記の3に相当する。
  2. ^ The PEACE Project”. 2009年11月9日閲覧。

関連項目


「マジックナンバー (フォーマット識別子)」の例文・使い方・用例・文例

Weblio日本語例文用例辞書はプログラムで機械的に例文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「マジックナンバー (フォーマット識別子)」の関連用語

マジックナンバー (フォーマット識別子)のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



マジックナンバー (フォーマット識別子)のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのマジックナンバー (フォーマット識別子) (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
Tanaka Corpusのコンテンツは、特に明示されている場合を除いて、次のライセンスに従います:
 Creative Commons Attribution (CC-BY) 2.0 France.
この対訳データはCreative Commons Attribution 3.0 Unportedでライセンスされています。
浜島書店 Catch a Wave
Copyright © 1995-2025 Hamajima Shoten, Publishers. All rights reserved.
株式会社ベネッセコーポレーション株式会社ベネッセコーポレーション
Copyright © Benesse Holdings, Inc. All rights reserved.
研究社研究社
Copyright (c) 1995-2025 Kenkyusha Co., Ltd. All rights reserved.
日本語WordNet日本語WordNet
日本語ワードネット1.1版 (C) 情報通信研究機構, 2009-2010 License All rights reserved.
WordNet 3.0 Copyright 2006 by Princeton University. All rights reserved. License
日外アソシエーツ株式会社日外アソシエーツ株式会社
Copyright (C) 1994- Nichigai Associates, Inc., All rights reserved.
「斎藤和英大辞典」斎藤秀三郎著、日外アソシエーツ辞書編集部編
EDRDGEDRDG
This page uses the JMdict dictionary files. These files are the property of the Electronic Dictionary Research and Development Group, and are used in conformance with the Group's licence.

©2025 GRAS Group, Inc.RSS