AIX上的LD_PRELOAD

时间:2009-01-30 07:24:27

标签: testing aix

有人可以告诉我在最新版本的AIX上是否存在与LD_PRELOAD类似的内容?更具体地说,我需要拦截从我的二进制文件到time()的调用,返回一个恒定的时间,用于测试目的。

3 个答案:

答案 0 :(得分: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)"

答案 1 :(得分:1)

AIX 5L使用LDR_PRELOAD变量。

答案 2 :(得分:0)

不是我知道的。我们做过的最近的事情(使用malloc / free进行调试)是

  • 创建一个只包含所需功能的新库文件(与原始名称相同)。
  • 将其放在与原始目录不同的目录中。
  • 从我们的库文件创建依赖文件。
  • 更改LD_LIBRARY_PATH(或SHLIB_PATH?)以将我们的库放在搜索链的第一位。

这样,我们的功能首先由装载机拾取,我们提供的任何功能都是由原装提供的。

这是不久前的事。 AIX 5L应该更像Linux(因此是L),因此它可以完全满足您的需求。

或者,如果您有源,请使用mytime()调用time()并提供您的函数。您没有测试完全相同的软件,但这种微小变化的差异无关紧要。