3

有人能告诉我最近版本的 AIX 上是否有类似于 LD_PRELOAD 的东西吗?更具体地说,出于测试目的,我需要拦截从我的二进制文件到 time() 的调用,返回一个常量时间。

4

3 回答 3

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)"
于 2009-08-10T12:34:33.097 回答
1

AIX 5L 使用 LDR_PRELOAD 变量。

于 2009-05-27T06:31:30.923 回答
0

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

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

这样,我们的函数首先被加载器拾取,任何我们没有提供的都是由原始提供的。

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

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

于 2009-01-30T07:43:00.303 回答