最近のバージョンの AIX で LD_PRELOAD に似たものがあるかどうか教えてもらえますか? より具体的には、テスト目的で、バイナリから time() への呼び出しをインターセプトし、一定の時間を返す必要があります。
3 に答える
AIX 5.3では、LDR_PRELOAD
(32ビットプログラムの場合)およびLDR_PRELOAD64
(64ビットプログラムの場合)変数が導入されました。これらは、LinuxのLD_PRELOADに類似しています。どちらもライブラリのコロンで区切られたリストであり、シンボルは他の何よりも先にリストされた共有オブジェクトからプリエンプティブにロードされます。
たとえば、共有オブジェクトfoo.soがある場合:
LDR_PRELOAD=foo.so
アーカイブを使用する場合は、AIXスタイルを使用して、アーカイブ内のオブジェクトを指定します。
LDR_PRELOAD="bar.a(shr.so)"
また、複数のエントリをコロンで区切ります。
LDR_PRELOAD="foo.so:bar.a(shr.so)"
AIX 5L は LDR_PRELOAD 変数を使用します。
私が知っているわけではありません。私たちが行った最も近いこと (デバッグ用に malloc/free を使用) は、
- 必要な関数だけを含む新しいライブラリ ファイルを作成します (元のファイルと同じ名前)。
- 元のディレクトリとは別のディレクトリに配置します。
- ライブラリ ファイルからオリジナルへの依存関係を作成します。
- LD_LIBRARY_PATH (または SHLIB_PATH?) を変更して、ライブラリを検索チェーンの最初に配置します。
このようにして、私たちの関数はローダーによって最初に取得され、提供されなかったものはすべてオリジナルによって提供されました。
これは少し前のことです。AIX 5L はより Linux (したがって L) に似ているはずなので、必要なことを正確に実行できる可能性があります。
または、ソースがある場合は、time() の呼び出しを mytime() で変更し、関数を提供します。まったく同じソフトウェアをテストしているわけではありませんが、そのような最小限の変更の違いは問題になりません。