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

有帮助吗?

解决方案

AIX 5.3引入的LDR_PRELOAD(对于32位程序)和LDR_PRELOAD64(对于64位程序)变量。他们analoguous到LD_PRELOAD在Linux上。两者都是库的冒号分隔的列表,和符号将被先发制人从列出的共享对象加载之前别的。

例如,如果有一个共享对象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),因此它可能能够完全满足您的要求。

或者,如果您有源代码,请将对 time() 的调用与 mytime() 合并并提供您的函数。你不是在测试 确切地 相同的软件,但这种最小变化的差异应该不重要。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top