2009-01-30 64 views
3

這裏有人能告訴我在最新版本的AIX上是否有與LD_PRELOAD類似的東西?更具體地說,我需要攔截來自我的二進制的調用time(),返回一個恆定的時間,用於測試目的。AIX上的LD_PRELOAD

回答

8

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)" 
0

不是我所知道的。我們所做的最近的事情(使用malloc /免費進行調試)是

  • 創建一個只包含所需功能(與原始名稱相同的名稱)的新庫文件。
  • 將其放置在與原始目錄不同的目錄中。
  • 使我們的庫文件對原始文件產生依賴關係。
  • 更改LD_LIBRARY_PATH(或SHLIB_PATH?)以將我們的庫放在搜索鏈中。

這樣,我們的功能首先被裝載機拾取,我們沒有提供的任何功能都是由原裝提供的。

這是一段時間以前。 AIX 5L應該更像Linux(因此是L),所以它可能能夠完全滿足你的要求。

或者,如果您有源代碼,請使用mytime()調用time()並提供您的函數。你不是在測試的確是相同的軟件,但這種最小改變的差異應該不重要。

1

AIX 5L使用LDR_PRELOAD變量。