リンカーとライブラリ

監査ライブラリの構築

監査ライブラリは他の共有オブジェクトと同様に構築されますが、プロセス内の固有名前空間には、いくつかの注意が必要です。

監査ライブラリが printf(3C) を呼び出す場合、その監査ライブラリは、libc への依存関係を定義しなければなりません (「共有オブジェクトの生成」を参照)。監査ライブラリには、固有の名前空間があるため、監査中のアプリケーションに存在する libc によって記号参照を満たすことはできません。監査ライブラリに libc への依存関係がある場合は、2 つのバージョンの libc.so.1 がプロセスに読み込まれます。1 つはアプリケーションのリンクマップリストの結合条件を満たし、もう 1 つは監査リンクマップリストの結合条件を満たします。

すべての依存関係が記録された状態で監査ライブラリが構築されるようにするには、リンカーの -z defs オプションを使用します (「共有オブジェクトの生成」を参照)。

システムインタフェースには、プロセスにおける実装状態の唯一のインスタンスであると想定して存在するものもあります。たとえば、スレッド、シグナル、および malloc(3C) などです。このようなインタフェースを使用すると、アプリケーションの動作が不正に変更されるおそれがあるため、監査ライブラリでは、このようなインタフェースの使用を避ける必要があります。


注 -

mapmalloc(3MALLOC) を使用した監査ライブラリによるメモリー割り当ては受け入れられます。これは、アプリケーションによって通常使用される割り当てスキーマとこの割り当てが共存可能なためです。