Oracle® Solaris 11.2 リンカーとライブラリガイド

印刷ビューの終了

更新: 2014 年 7 月
 
 

監査インタフェース制御フロー

以降のセクションでは、監査ライブラリが各インタフェースで実行できる監査インタフェースルーチンおよびアクションについて説明します。プロセス初期設定に重点が置かれています。これらのルーチンは、プロセスの起動時に提供される大域監査の一般的な場合に呼び出される順序で表示されます。

監査インタフェースは、情報と制御の 2 つのカテゴリに分類されます。

情報インタフェースには、オブジェクト検索、オブジェクトロード、シンボル結合など、実行中のプロセスに関する監査ライブラリ情報が表示されます。さらにこれらのインタフェースでは、監査者は、ロードされたオブジェクトを変更し、将来のシンボル結合イベントについて通知するように設定できます。

制御インタフェースは、監査ライブラリで、プロセス実行内のフェーズの開始または終了を追跡できるようにするために呼び出されます。これらのインタフェースでは、監査者は一貫した一連のオブジェクトを安全に検査でき、新しいオブジェクトをロードすることもできます。

監査ライブラリが最初にロードされると、ライブラリの la_version() インタフェースがすぐに呼び出されます。このハンドシェイクにより、監査ライブラリは、サポートされているか検証され、実行時リンカーから必要とするインタフェースバージョンを定義できます。

監査ライブラリは、LD_AUDIT を使用するか、プロセスを始動する実行可能オブジェクト内のローカル監査定義から、プロセスの始動時に確立できます。監査インタフェースの呼び出しを参照してください。このシナリオでは、実行可能オブジェクトと実行時リンカーの両方の la_objopen() 呼び出しが、監査ライブラリに提供されます。

この時点では、プロセスはまだ構築の初期段階です。監査者は、プロセスへのオブジェクトの追加やプロセスの徹底的なシンボル検索など、この構築を妨げる可能性のあるすべてのアクションを実行しないようにする必要があります。このようなアクションを行うと、シンボル検索に適合しようとしてオブジェクトを早まってロードしたりリロードする結果になる可能性があります。

プロセス初期設定時に即座にロードされる依存関係は、それぞれ監査ライブラリの la_objopen() インタフェースに報告されます。遅延ロードを使用するプロセスの場合、プロセス初期設定時にはわずかな依存関係しかロードされないことがあります。動的依存関係の遅延読み込みを参照してください。ロードされた各オブジェクトは再配置されます。この結果、シンボル参照とシンボル定義との間にシンボル結合が確立されます。これらの結合は、監査ライブラリの la_symbind() インタフェースに報告されます。

即時依存関係がすべてロードされ、再配置されると、監査ライブラリの la_preinit() インタフェースが呼び出されます。この時点では、プロセスはまだ構築中です。スレッドの初期化と初期化ルーチンコレクションはまだ保留中です。ただし、このインタフェースには、初期プロセスにオブジェクトを追加する場合に便利な制御ポイントが用意されています。

スレッドの初期化が完了すると、監査ライブラリの la_callinit() インタフェースが呼び出されます。この時点で、ロードされたすべてのオブジェクトは実行する準備ができており、その初期化ルーチンは実行に備えて収集されソートされています。初期設定および終了ルーチンを参照してください。la_callinit() 制御ポイントは、アプリケーションコードの実行への遷移にマークを付けます。

アプリケーションコードを実行した結果、シンボル参照とシンボル定義の間で、関数呼び出し結合が確立されます。これらの結合は、監査ライブラリの la_symbind() または la_pltenter()、あるいはその両方のインタフェースに報告されます。遅延ロードでは、シンボル参照を満たすために追加のオブジェクトをロードすることができ、このことは監査ライブラリの la_objopen() に報告されます。

すべての初期設定コードが実行されると、監査ライブラリの la_callentry() インタフェースが呼び出されます。la_callentry() 制御ポイントは、プロセス初期設定の最後と、アプリケーションエントリポイント (通常は start() または main()) への遷移にマークを付けます。

プロセスは実行し続けるので、さらにシンボル結合が発生し、la_symbind() または la_pltenter()、あるいはその両方が呼び出されることがあります。追加の依存関係がロードされ、la_objopen() が呼び出されることもあります。新しい依存関係がアンロードされ、la_objclose() が呼び出されることもあります。オブジェクトのロードまたはアンロードはすべて、la_activity() 呼び出しのペアによって結合されます。最初の la_activity() は、対象の動作 (オブジェクトの追加または削除) を示唆します。2 番目の la_activity() は、プロセス内の依存関係構造が整合していることを示します。監査者は、一貫した通知に従うようにプロセスの検査を制限する必要があります。