質問
最近のバージョンの AIX に LD_PRELOAD に似たものがあるかどうか、ここで誰かが教えてもらえますか?より具体的には、テスト目的で、バイナリから time() への呼び出しをインターセプトし、定数の時間を返す必要があります。
解決
AIX 5.3(32ビットプログラムのための)LDR_PRELOAD
を導入しLDR_PRELOAD64
(64ビットプログラムのための)変数。彼らは、Linux上でLD_PRELOADするanaloguousです。どちらも、図書館のコロンで区切られたリストであり、シンボルは、プリemptively何かの前に列挙された共有オブジェクトからロードされます。
たとえば、あなたが共有オブジェクト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 であるため)、必要なことを正確に実行できる可能性があります。
あるいは、ソースがある場合は、mytime() を使用して time() への呼び出しを変更し、関数を提供します。あなたはテストしていません その通り 同じソフトウェアですが、そのような最小限の変更の違いは問題ではありません。