AR ファイル形式とは?
.ar アーカイブ形式は、ベル研究所でオリジナルの Unix アーカイバとして作成された Unix Version 1 (1971) まで遡ります。.ar ファイルは複数のメンバーファイルを連結したもので、各ファイルの前にはメンバー名、更新日時、権限、バイトサイズを記録した 60 バイトの固定長 ASCII ヘッダーが付与されます。すべてのアーカイブは 8 バイトのマジック文字列 !<arch> と、それに続く単一のラインフィード(0x0A)で始まります。
この形式は、デフォルトではメンバーを非圧縮で保存します。主に 2 つのバリアントが存在します:
- BSD バリアント(macOS で使用):各メンバーヘッダーの直後に長いファイル名をインラインで拡張します。
- System V/GNU バリアント(Linux で使用):長い名前を特殊な
//メンバーに保存し、効率的なリンク時の検索のために/シンボルインデックスエントリを先頭に付加します。
今日、.ar は Linux や macOS 上の .a 静的ライブラリとして最も一般的に遭遇します。ここでは GNU binutils の ar ツールが標準的な実装です。Debian の .deb パッケージも ar アーカイブです。.deb の拡張子を変更して展開すると、内部の control.tar と data.tar メンバーを確認できます。一般的な ar コマンド:ar rcs libfoo.a *.o はアーカイブを作成し、ar t archive.ar はメンバーを一覧表示し、ar x archive.ar はそれらを展開します。
セキュリティと安全性
リスク: LOWAR アーカイブ自体は実行セマンティクスを持たないコンテナであり、コードを自動実行することはありません。ただし、内部のメンバーはコンパイルされたオブジェクトファイルや実行ファイルである可能性があり、それらは悪意のあるものである可能性があります。信頼できないソースから ar アーカイブを展開する場合は、実行前に展開されたファイルを検査してください。バイナリにリンクされた静的ライブラリはそのバイナリの一部となります。改ざんされた静的ライブラリはサプライチェーン攻撃のベクトル(例:侵害されたツールチェーンアーカイブ)となります。.a/.ar ライブラリを含むツールチェーンのタールボールをダウンロードする際は、常にチェックサムを確認してください。
形式の詳細
概要- Debian パッケージ (.deb) - A .deb ファイルは control.tar.* および data.tar.* メンバーを含む ar アーカイブです。ar コンテナはエンドユーザーに対して透過的です(dpkg が処理します)。
- .a 静的ライブラリ(同じ形式、異なる拡張子) - Linux/macOS では、.a は ar 形式の静的ライブラリの慣用的な拡張子です。.ar はあまり一般的ではありませんが、同一のものです。
AR ファイルを開くプログラム
技術的詳細
詳細仕様| マジックバイト | 21 3C 61 72 63 68 3E 0A - ASCII 文字列 !<arch> とオフセット 0 の改行 (0x0A) |
| MIME タイプ | application/x-archive |
| メンバーごとのヘッダーサイズ | 60 バイト(固定幅、ASCII エンコードされたフィールド) |
| ヘッダーフィールドのレイアウト | ファイル名 16 B、更新時刻 12 B、UID 6 B、GID 6 B、モード 8 B、サイズ 10 B、マジック 2 B |
| メンバーのアライメント | 2 バイト境界。奇数長のメンバーには単一の改行文字 (0x0A) がパディングされます |
| 圧縮 | デフォルトではなし - メンバーファイルはそのまま非圧縮で保存されます |
| 整合性チェック | ar 形式にはメンバーごと、またはアーカイブレベルのチェックサムはありません |
| ファイル名の制限 | 固定ヘッダーでは 16 文字。BSD インライン拡張または System V // メンバーテーブルを介せば無制限 |
| 形式のバリアント | BSD (macOS): インライン拡張名。System V/GNU (Linux): 長い名前用の // メンバーテーブル |
| GNU シンボルインデックス | GNU ar は、効率的なリンク時のシンボル検索のために、.a アーカイブの先頭に / シンボルテーブルメンバーを付加します |
| Thin アーカイブのサポート | GNU thin アーカイブはマジック 21 3C 74 68 69 6E 3E 0A (!<thin>) を使用し、データではなくファイルパスを保存します |
| 主な用途 | .a 静的ライブラリ (Linux, macOS), .deb Debian パッケージ, .ipk OpenWrt パッケージ |
| プラットフォーム | Linux, macOS, FreeBSD, Solaris, AIX, Windows (MinGW/Cygwin/WSL) |
| リリース日 | 1971 (Unix v1, as the original Unix archiver) |
| 最新バージョン | POSIX.1-2017 specifies the format; GNU ar (binutils) is current implementation |
| オープンスタンダード | はい · ロイヤリティフリー |
| 仕様書 | pubs.opengroup.org |
コミュニティ Q&A
ユーザーからの質問まだ質問はありません。AR ファイルについて最初の質問をしてみましょう。