SIMPLE SOLUTIONS

GETAUXVAL(3) - Linux manual

補助ベクトルから値を取得する.

2014-08-19
GETAUXVAL(3) Linux Programmer's Manual GETAUXVAL(3)

getauxval - 補助ベクトルから値を取得する

#include <sys/auxv.h> unsigned long getauxval(unsigned long type);

getauxval() 関数は補助ベクトル (auxiliary vector) から値を取得する。 補助ベクトルは、 プログラムが実行される際に、 カーネルの ELF バイナリーローダーがユーザー空間にある種の情報を渡すのに使われる仕組みである。 補助ベクトルの各エントリーは、 このエントリーを示すタイプとそのタイプの値のペアで構成される。 引き数 type が指定されると、 getauxval() は対応する値を返す。 それぞれの type に対して返される値の詳細を以下に示す。 すべてのアーキテクチャーですべて type 値が存在するわけではない。 AT_BASE プログラムインタープリター (通常は動的ローダー) のベースアドレス。 AT_BASE_PLATFORM 実プラットフォームを示す文字列。 AT_PLATFORM と異なる値の場合がある。 (PowerPC のみ) AT_CLKTCK times(2) のカウントが行われる周波数。 この値は sysconf(_SC_CLK_TCK) でも取得できる。 AT_DCACHEBSIZE データキャッシュのブロックサイズ。 AT_EGID このスレッドの実効グループ ID。 AT_ENTRY 実行ファイルのエントリーアドレス。 AT_EUID このスレッドの実効ユーザー ID。 AT_EXECFD プログラムのファイルディスクリプター。 AT_EXECFN 実行プログラムに使用されたパス名。 AT_FLAGS フラグ (未使用)。 AT_FPUCW 使用された FPU 制御ワード (SuperH アーキテクチャーのみ)。 カーネルが実行した FPU 初期化に関する情報を提供するためのものである。 AT_GID このスレッドの実グループ ID。 AT_HWCAP プロセッサーの詳細な機能 (capabilities) を示す複数バイトからなるビットマスクへのポインターである。 このビットマスクの内容はハードウェア依存である (例えば、 Intel x86 アーキテクチャーに関する詳細はカーネルのソースファイル arch/x86/include/asm/cpufea‐ ture.h を参照)。 同じ情報を人が読みやすい形になっているのが /proc/cpuinfo である。 AT_ICACHEBSIZE 命令キャッシュのブロックサイズ。 AT_PAGESZ システムページサイズ (sysconf(_SC_PAGESIZE) が返す値と同じ)。 AT_PHDR 実行プログラムのプログラムヘッダーのアドレス。 AT_PHENT プログラムヘッダーエントリーのサイズ。 AT_PHNUM プログラムヘッダー数。 AT_PLATFORM このプログラムが実行されているハードウェアプラットフォームを特定する文字列へのポインター。 動的リンカーは rpath 値の解釈を行う際にこの値を使用する。 AT_RANDOM ランダム値が入った 16 バイトがあるアドレス。 AT_SECURE この実行ファイルを安全に扱う必要がある場合に 0 以外の値になる。 一番よくある場合としては、 0 以外の値になるのは、 そのプロセスが set-user-ID か set-group-ID されたプログラムを実行している場合である。 他の場合としては、 Linux Security Module が有効になっている場合にも 0 以外の値となる。 この値が 0 以外の場合、 動的リンカーは特定の環境変数の使用を無効化し (ld-linux.so(8) 参照)、 glibc はそのプロセスの動作を別の観点で変更する (secure_getenv(3) 参照)。 AT_SYSINFO vDSO のシステムコール関数へのエントリーポイント。すべてのアーキテクチャーで存在するわけではなく、 また必要というわけでもない (例えば x86-64 には存在しない)。 AT_SYSINFO_EHDR 仮想動的共有オブジェクト (vDSO; virtual Dynamic Shared Object) が入ったページのアドレス。 vDSO は、 特定のシステムコールの高速な実装を提供するためにカーネルが作成する共有オブジェクトである。 AT_UCACHEBSIZE ユニファイド (unified) キャッシュのブロックサイズ。 AT_UID このスレッドの実ユーザー ID。

成功すると、 getauxval() は type に対応する値を返す。 type が見つからない場合には 0 を返す。

ENOENT (glibc 2.19 以降) type に対応するエントリーが補助ベクトルになかった。

getauxval() 関数は glibc バージョン 2.16 で追加された。

マ 関数 getauxval() はスレッドセーフである。

この関数は非標準で glibc による拡張である。

補助ベクトルの情報を主に使用するのは、 動的ローダー ld-linux.so(8) である。 補助ベクトルは、 カーネルが動的リンカーが通常もしくは常に必要とするある意味標準的な情報を伝えるための便利で効率的なショートカットである。 いくつかの場合では、 同じ情報がシステムコール経由でも取得できるが、 補助ベクトルを使う方がコストがかからない。 補助ベクトルには、 単に、 プロセスのアドレス空間の引き数リストと環境上に存在するだけである。 プログラム実行時に LD_SHOW_AUXV 環境変数を設定すると、 プログラムに渡された補助ベクトルを表示することができる。 $ LD_SHOW_AUXV=1 sleep 1 任意のプロセスの補助ベクトルは (ファイルのアクセス許可があれば) /proc/PID/auxv 経由で取得できる。 詳細は proc(5) を参照。

glibc 2.19 で ENOENT エラーが追加される前は、 type が見つからなかった場合と type に対応する値が 0 だった場合を明確に区別する方法がなかった。

secure_getenv(3), vdso(7), ld-linux.so(8)

この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。
GNU 2014-08-19 GETAUXVAL(3)
getauxval(3).txt (日本語 / Japanese)
Index English version of getauxval(3)
Go top