FreeBSD 日本語マニュアル検索 (jman/japropos/jwhatis)


日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。

4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.3-RELEASE-K, 13.0-RELEASE-K から 13.2-RELEASE-K は、全翻訳済み)

13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。



検索コマンド: man apropos whatis
コマンド/キーワード:
日本語マニュアル RELEASE :
セクション:
Table of Contents
名称 | 書式 | 解説 | 関連項目 | 歴史 | バグ
A.OUT(5)            FreeBSD ファイルフォーマットマニュアル            A.OUT(5)

名称
     a.out -- 実行可能バイナリファイルのフォーマット

書式
     #include <a.out.h>

解説
     インクルードファイル <a.out.h> は、3 つの構造体といくつかのマクロを宣言し
     ています。構造体は、システムの実行形式のマシンコードファイル (`binaries')
     の形式を記述しています。

     バイナリファイルは、最大 7 つのセクションで構成されています。順々に、これ
     らのセクションは、次の通りです。

     exec ヘッダ       バイナリファイルをメモリにロードして、それを実行するた
                       めにカーネルによって、そして、バイナリファイルを他のバ
                       イナリファイルと結合するためにリンクエディタ ld(1) に
                       よって使用されるパラメータを含んでいます。このセクショ
                       ンは、必須のセクションのみです。

     テキストセグメント
                       プログラムが実行するとき、メモリにロードされるマシン
                       コードと関連データを含みます。読み込み専用でロードされ
                       る場合があります。

     データセグメント  初期化されたデータを含んでいます。常に、書き込み可能な
                       メモリにロードされます。

     テキストリロケーション
                       バイナリファイルを結合するとき、テキストセグメント内の
                       ポインタを更新するためにリンクエディタによって使用され
                       るレコードを含んでいます。

     データのリロケーション
                       テキストのリロケーションセクションと同様ですが、データ
                       セグメントポインタのためです。

     シンボルテーブル  指定された変数のアドレスとバイナリファイルの間の関数
                       (`symbols') を相互参照するリンクエディタによって使用さ
                       れるレコードを含んでいます。

     文字列テーブル    シンボル名に対応する文字列を含んでいます。

     すべてのバイナリファイルは、exec 構造体で始まります:

           struct exec {
                   unsigned long   a_midmag;
                   unsigned long   a_text;
                   unsigned long   a_data;
                   unsigned long   a_bss;
                   unsigned long   a_syms;
                   unsigned long   a_entry;
                   unsigned long   a_trsize;
                   unsigned long   a_drsize;
           };

     フィールドには、次の機能があります:

     a_midmag  このフィールドは、ホストのバイト順で格納されます。それには、マ
               クロ N_GETFLAG(), N_GETMID() と N_GETMAGIC() によってアクセスさ
               れるサブ構成要素の数があり、マクロ N_SETMAGIC() によって設定さ
               れます。

               マクロ N_GETFLAG() は、いくつかのフラグを返します:

               EX_DYNAMIC  実行形式が実行時のリンクエディタのサービスを必要と
                           することを示します。

               EX_PIC      オブジェクトに位置に依存しない (position indepen
                           dent) コードが含まれていることを示します。このフラ
                           グは、`-k' フラグが与えられたとき、as(1) によって設
                           定され、必要であるなら、ld(1) によって保存されま
                           す。

               EX_DYNAMIC と EX_PIC の両方が設定されているなら、オブジェクト
               ファイルは、実行時のリンクエディタによってプロセスアドレス空間
               にロードされる、位置に依存しない実行形式イメージ (例えば、共有
               ライブラリ) です。

               マクロ N_GETMID() は、マシン ID を返します。これは、バイナリが
               実行されることを目的としている (複数の) マシンを示します。

               N_GETMAGIC() は、バイナリファイルをユニークに識別し、異なるロー
               ド規約を区別するマジックナンバを指定します。フィールドは、次の
               値の 1 つが含まれていなければなりません:

               OMAGIC  テキストとデータセグメントは、ヘッダの直後に続き、連続
                       しています。カーネルは、テキストとデータセグメントの両
                       方を書き込み可能なメモリにロードします。

               NMAGIC  OMAGIC と同様に、テキストとデータセグメントは、ヘッダの
                       直後に続き、連続しています。しかしながら、カーネルは、
                       読み込み専用メモリにテキストをロードし、テキストの後の
                       次のページ境界で書き込み可能なメモリにデータをロードし
                       ます。

               ZMAGIC  カーネルは、必要に応じて、バイナリから個別のページを
                       ロードします。ヘッダ、テキストセグメントとデータセグメ
                       ントは、すべて、リンクエディタによってページサイズの倍
                       数にパディングされます。カーネルがテキストセグメントか
                       らロードされるページは、読み込み専用ですが、データセグ
                       メントからのページは、書き込み可能です。

     a_text    テキストセグメントのバイト単位のサイズを含んでいます。

     a_data    データセグメントのバイト単位のサイズを含んでいます。

     a_bss     `bss セグメント' のバイト数を含み、データセグメントの後の最初の
               ブレーク (brk(2)) を設定するためにカーネルによって使用されま
               す。カーネルは、書き込み可能なメモリのこの量が、データセグメン
               トに続くように表れ、最初に 0 として読み込みできるように、プログ
               ラムをロードします。(bss = block started by symbol; シンボルに
               よって開始されるブロック)

     a_syms    シンボルテーブルセクションのバイト単位のサイズを含んでいます。

     a_entry   カーネルがプログラムを読み込んだ後に、そのエントリポイントのメ
               モリ内のアドレスを含んでいます。カーネルは、このアドレスのマシ
               ンコマンドからプログラムの実行を開始します。

     a_trsize  テキストリロケーションテーブルのバイト単位のサイズを含んでいま
               す。

     a_drsize  データリロケーションテーブルのバイト単位のサイズを含んでいま
               す。

     <a.out.h> インクルードファイルは、一貫性をテストするために、またはバイナ
     リファイルのセクションのオフセットを位置付けるために、exec 構造体を使用し
     て、いくつかのマクロを定義しています。

     N_BADMAG(exec)  a_magic フィールドに、認識された値が含まれていないなら、0
                     以外の値。

     N_TXTOFF(exec)  テキストセグメントの始まりのバイナリファイルのバイトオフ
                     セット。

     N_SYMOFF(exec)  シンボルテーブルの始まりのバイトオフセット。

     N_STROFF(exec)  文字列テーブルの始まりのバイトオフセット。

     リロケーションレコードには、relocation_info 構造体によって記述される標準
     の形式があります。

           struct relocation_info {
                   int             r_address;
                   unsigned int    r_symbolnum : 24,
                                   r_pcrel : 1,
                                   r_length : 2,
                                   r_extern : 1,
                                   r_baserel : 1,
                                   r_jmptable : 1,
                                   r_relative : 1,
                                   r_copy : 1;
           };

     relocation_info フィールドは、次のように使用されます:

     r_address    リンクeエディトに必要なポインタのバイトオフセットを含んでい
                  ます。テキストリロケーションオフセットは、テキストセグメント
                  の開始から計算され、データセグメントの開始からのデータリロ
                  ケーションオフセットが計算されます。リンクエディタは、このオ
                  フセットで既に格納されている値を、このリロケーションレコード
                  を使用して計算する新しい値に追加します。

     r_symbolnum  シンボルテーブル内のシンボル構造体の順序序数 (それは、バイト
                  オフセットではありません) を含んでいます。リンクエディタは、
                  このシンボルのための絶対アドレスを解決した後に、リロケーショ
                  ン中のポインタにそのアドレスを追加します。(r_extern ビットが
                  クリアであるなら、状況は、異なります。以下を参照。)

     r_pcrel      これが設定されているなら、リンクエディタは、PC 相対アドレス
                  指定を使用してマシンコード命令の一部であるポインタを更新して
                  いると仮定します。リロケーションされたポインタのアドレスは、
                  実行中のプログラムがそのポインタを使用するとき、その値に暗黙
                  的に追加されます。

     r_length     バイト単位のポインタの長さの 2 を底とする対数を含んでいま
                  す。1 バイトの変位 (displacement) のために 0、2 バイトの変位
                  (displacement) のために 1、4 バイトの変位 (displacement) の
                  ために 2。

     r_extern     このリロケーションが外部参照を必要としているなら、設定しま
                  す。リンクエディタは、ポインタを更新するシンボルアドレスを使
                  用しなければなりません。r_extern ビットがクリアであるなら、
                  リロケーションは、`local' です。リンクエディタは、シンボルの
                  値の変更ではなく、さまざまなセグメントのロードアドレスの変更
                  を反映するようにポインタを更新します (また r_baserel が設定
                  されている (下記参照) ときを除いて)。この場合に、r_symbolnum
                  フィールドの内容は、n_type 値です (下記参照)。このタイプ
                  フィールドは、リロケーションされたポインタがどのセグメントを
                  指しているかをリンクエディタに伝えます。

     r_baserel    設定されているなら、r_symbolnum フィールドで識別されるような
                  シンボルは、グローバルオフセットテーブル (Global Offset Ta
                  ble) へのオフセットにリロケートされます。実行時に、このオフ
                  セットのグローバルオフセットテーブル (Global Offset Table)
                  のエントリは、シンボルのアドレスに設定されます。

     r_jmptable   設定されているなら、r_symbolnum フィールドで識別されるような
                  シンボルは、プロシージャリンクテーブル (Procedure Linkage
                  Table) へのオフセットにリロケートされます。

     r_relative   設定されているなら、このリロケーションは、このオブジェクト
                  ファイルが一部になるイメージの (実行時の) ロードアドレスに相
                  対的です。このタイプのリロケーションは、共有オブジェクトでの
                  み存在します。

     r_copy       設定されているなら、このリロケーションレコードは、内容が
                  r_address で与えられた場所にコピーされるべきシンボルを識別し
                  ます。コピーは、共有オブジェクトの適切なデータ項目から実行時
                  のリンクエディタによって行なわれます。

     シンボルは、名前をアドレス (または、より一般的に、文字列から値) にマップ
     します。リンクエディタは、アドレスを調整するので、シンボルの名前は、絶対
     値が割り当てられるまで、そのアドレスを表すために使用されなければなりませ
     ん。シンボルは、シンボルテーブルの固定長レコードと、文字列テーブルの可変
     長の名前から成ります。シンボルテーブルは、nlist 構造体の配列です:

           struct nlist {
                   union {
                           const char      *n_name;
                           long            n_strx;
                   } n_un;
                   unsigned char           n_type;
                   char                    n_other;
                   short                   n_desc;
                   unsigned long           n_value;
           };

     フィールドは、次のように使用されます:

     n_un.n_strx  このシンボルの名前のための文字列テーブルへのバイトオフセット
                  を含んでいます。プログラムが nlist(3) 関数でシンボルテーブル
                  にアクセスするとき、このフィールドは、メモリ内の文字列へのポ
                  インタである、n_un.n_name フィールドで置き換えられます。

     n_type       シンボルの値を更新する方法を決定するために、リンクエディタに
                  よって使用されます。n_type フィールドは、ビットマスクを使用
                  して 3 つのサブフィールドに分類されます。リンクエディタは、
                  `external' シンボルとして設定された N_EXT タイプビットでシン
                  ボルを扱い、他のバイナリファイルからへの参照を許可します。
                  N_TYPE マスクは、リンクエディタに関心があるビットを選択しま
                  す。

                  N_UNDF  未定義シンボル。リンクエディタは、このシンボルの絶対
                          値を決定するために、別のバイナリファイルの同じ名前が
                          ある外部シンボルを位置付けなければなりません。特殊な
                          場合として、n_value フィールドが 0 以外で、リンクエ
                          ディトにバイナリファイルが、このシンボルを定義してい
                          ないなら、リンクエディタは、n_value と等しいバイトの
                          量を予約して、このシンボルを bss セグメントのアドレ
                          スに解決します。このシンボルが複数のバイナリファイル
                          で定義されず、バイナリファイルがサイズに一致しないな
                          ら、リンクエディタは、すべてのバイナリに渡って見つか
                          る最大サイズを選択します。

                  N_ABS   絶対シンボル。リンクエディタは、絶対シンボルに更新さ
                          れません。

                  N_TEXT  テキストシンボル。このシンボルの値は、テキストアドレ
                          スであり、リンクエディタは、バイナリファイルをマージ
                          するとき、それを更新します。

                  N_DATA  データシンボル。N_TEXT と同様ですが、データアドレス
                          のためです。テキストシンボルとデータシンボルの値は、
                          ファイルオフセットではなく、アドレスです。ファイルの
                          オフセットを復元するために、対応するセクションの先頭
                          のロードされたアドレスを識別し、それを減算し、次に、
                          セクションのオフセットを追加する必要があります。

                  N_BSS   bss シンボル。テキストまたはデータシンボルと似ていま
                          すが、バイナリファイルの対応するオフセットはありませ
                          ん。

                  N_FN    ファイル名シンボル。リンクエディタは、バイナリファイ
                          ルをマージするとき、バイナリファイルから他のシンボル
                          の前に、このシンボルを挿入します。シンボルの名前は、
                          リンクエディタに与えられたファイル名で、その値は、そ
                          のバイナリファイルからの最初のテキストアドレスです。
                          ファイル名のシンボルは、リンクエディトまたはロードの
                          ために必要ではありませんが、デバッガのために役に立ち
                          ます。

                  N_STAB マスクは、gdb(1) のようなシンボリックデバッガにとって
                  関心があるビットを選択します。値は、stab(5) で説明されていま
                  す。

     n_other      このフィールドは、n_type フィールドによって決定されるような
                  セグメントに関して、シンボルの位置に依存しないシンボルの性質
                  に関する情報を提供します。現在、n_other フィールドの下位 4
                  ビットは、次の 2 つの値の 1 つを保持しています: AUX_FUNC と
                  AUX_OBJECT (それらの定義については、<link.h> を参照してくだ
                  さい)。AUX_FUNC は、シンボルを呼び出し可能な関数に関連づけま
                  すが、一方 AUX_OBJECT は、テキストまたはデータセグメントのい
                  ずれかのそれらの位置に関係なく、シンボルをデータに関連づけま
                  す。このフィールドは、動的な実行形式の構築のために ld(1) に
                  よって使用されることを目的としています。

     n_desc       デバッガによって使用するために予約されています。リンクエディ
                  タによって変更せずに渡されます。さまざまなデバッガは、さまざ
                  まな目的のために、このフィールドを使用します。

     n_value      シンボルの値を含んでいます。テキスト、データ、と bss シンボ
                  ルに対して、これは、アドレスです。(デバッガのシンボルのよう
                  な) 他のシンボルに対して、値は、任意です。

     文字列テーブルは、ヌル文字で終わるシンボル文字列が続いている unsigned
     long の長さから成ります。長さは、バイト単位でテーブル全体のサイズを表すの
     で、その最小値 (または最初の文字列のオフセット) は、32 ビットマシンで、常
     に 4 です。

関連項目
     as(1), gdb(1), ld(1), brk(2), execve(2), nlist(3), core(5), elf(5),
     link(5), stab(5)

歴史
     <a.out.h> インクルードファイルは、Version 7 AT&T UNIX で登場しました。

バグ
     サポートされているアーキテクチャのすべてが、a_midmag を使用するわけではな
     いので、バイナリが実際のマシンコードを調べずに実行されるか、どのアーキテ
     クチャであるかを決定することは困難であるかもしれません。マシンの識別子が
     あったとしても、exec ヘッダのバイト順は、マシンに依存します。

FreeBSD 12.2                     June 10, 2010                    FreeBSD 12.2

Table of Contents

FreeBSD マニュアル検索