2009-01-30 69 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变量。