EN JA
AOUT(4)
AOUT(4) FreeBSD Kernel Interfaces Manual AOUT(4)

名称

aout古い a.out 形式のバイナリファイルを実行するためのカーネルサポート

書式

kldload a.out

解説

a.out(5) 実行形式は、 FreeBSD 3.0 リリースの前に使用されていました。 i386 がその当時サポートされていた唯一のアーキテクチャだったときから、 i386、amd64 と (部分的に) ia64 のような、i386 コードの実行をサポートするプラットフォームでのみ a.out(5) 実行形式を起動することができます。

古い syscall と古い syscall 呼び出し方法のためのカーネルサポートを追加するためには、カーネル設定ファイルに次のオプションを置きます:

options COMPAT_43
 
options COMPAT_FREEBSD32

COMPAT_FREEBSD32 オプションは、64 ビットの CPU アーキテクチャでのみ必要です。

aout.ko モジュールは、 a.out(5) イメージのアクティベータ (起動プログラム) をサポートするために kldload(8) ユーティリティでロードする必要があります:

kldload aout

もう一つの方法として、ブート時にモジュールをロードするためには、 loader.conf(5) に次の行を置きます:

aout_load="YES"

a.out(5) 形式は、ずっと前にはまったく主流でした。今日の現代的なオペレーティングシステムの合理的なデフォルトの設定とセキュリティ要件は、当時のデフォルトの環境と矛盾し、古いバイナリのための自然な環境を模倣するためにシステムの調整を必要とします。

次の sysctl(8) 調整変数は、次のために役に立ちます:

security.bsd.map_at_zero
アドレス 0 でプロセスページのマッピングを許可するために 1 に設定します。いくつかの非常に古い ZMAGIC 実行形式のイメージは、アドレス 0 でテキストのマッピングを要求します。
kern.pid_max
FreeBSD の古いバージョンは、 pid_t のための符号付き 16 ビットのタイプを使用しました。現在のカーネルは、 pid_t のための 32 ビットのタイプを使用し、99999 までのプロセス ID を許可しています。古い pid_t によってそのような値を表わすことができず、例えば、シェルのための、 wait(2) syscall を使用するプロセスのためにほとんど問題を引き起こします。その問題のまわりで動作するために sysctl を 30000 に設定します。
kern.elf32.read_exec
実行を許可するために 32 ビットのプロセスによって実行されるあらゆるアクセス可能なメモリのマッピングを強制するために 1 に設定します、 mmap(2) を参照してください。古い i386 CPU は、ページからの実行を許可しない PTE のビットがないので、多くの古いプログラムは、実行形式のコードのマッピングのためでさえ PROT_EXEC を指定しませんでした。 sysctl は、マッピングに許可されたあらゆるアクセスがあるなら、 PROT_EXEC を強制します。ホストのアーキテクチャが非実行形式のマッピングを許可するなら、設定が単に必要です。

関連項目

execve(2), a.out(5), elf(5), sysctl(8).

歴史

a.out(5) 実行形式は、古い AT&T UNIX で使用されていました、そして初期から FreeBSD 2.2.9 までの FreeBSD のための主な実行形式として役に立ちました。 FreeBSD 3.0 で、それは、 elf(5) によって取り換えられました。

作者

aout マニュアルページは、 Konstantin Belousov <kib@FreeBSD.org>によって書かれました。

バグ

64 ビットのアーキテクチャにおいて、より古い syscall のためのすべてのラッパ (wrapper) が、実装されているとは限りません。
August 14, 2012 FreeBSD