リンカーとライブラリ

ローカル監査の記録

ローカル監査要求は、オブジェクトがリンカーオプション -p あるいは -P を使用して作成された場合に確立できます。開発者が、共有オブジェクト libfoo.so.1 の使用状況を、監査ライブラリ audit.so.1 を使用して監査したい場合は、リンク編集時に -p オプションを使用してこの要求を記録すれば、その監査を行うことができます。


$ cc -G -o libfoo.so.1 -Wl,-paudit.so.1 -Kpic foo.c
$ dump -Lv libfoo.so.1 | fgrep AUDIT
[3]    AUDIT      audit.so.1

実行時には、この監査識別子があることにより監査ライブラリが読み込まれ、識別するオブジェクトに関する情報がその監査ライブラリに渡されます。

ただし、この仕組みだけでは、識別するオブジェクトの検索などの情報は監査ライブラリが読み込まれる前に発生してしまいます。できるだけ多くの監査情報を提供するため、ローカル監査を要求するオブジェクトの存在は、そのオブジェクトのユーザーに広く知らされます。たとえば、libfoo.so.1 に依存するアプリケーションを作成すると、そのアプリケーションは、その依存関係の監査が必要であることを示すよう認識されます。


$ cc -o main main.c libfoo.so.1
$ dump -Lv main | fgrep AUDIT
[5]    DEPAUDIT   audit.so.1

この仕組みによって使用できる監査の結果、監査ライブラリが読み込まれ、アプリケーションの明白な依存関係すべてに関する情報が渡されます。この依存関係の監査は、リンカーの -P オプションを使用することにより、オブジェクトの作成時に直接記録することもできます。


$ cc -o main main.c -Wl,-Paudit.so.1
$ dump -Lv main | fgrep AUDIT
[5]    DEPAUDIT   audit.so.1


注 -

環境変数 LD_NOAUDIT を NULL 以外の値に設定すると、実行時に監査を無効にすることができます。