代码之家  ›  专栏  ›  技术社区  ›  Arlaharen

AIX上的ld_预加载

  •  3
  • Arlaharen  · 技术社区  · 16 年前

    这里有人能告诉我最近版本的AIX上是否有类似于ld_preload的东西吗?更具体地说,为了测试的目的,我需要截取从binary到time()的调用,返回一个常量时间。

    3 回复  |  直到 15 年前
        1
  •  8
  •   Ville Laurikari    15 年前

    AIX5.3引入了 LDR_PRELOAD (用于32位程序)和 LDR_PRELOAD64 (用于64位程序)变量。它们类似于Linux上的ld_预加载。两者都是以冒号分隔的库列表,符号将先于任何其他内容从列出的共享对象中预先加载。

    例如,如果您有一个共享对象foo.so:

     LDR_PRELOAD=foo.so
    

    如果使用存档,请使用AIX样式指定存档中的对象:

     LDR_PRELOAD="bar.a(shr.so)"
    

    用冒号分隔多个条目:

     LDR_PRELOAD="foo.so:bar.a(shr.so)"
    
        2
  •  1
  •   Tony Finch    15 年前

    AIX5L使用LDR U PRELOAD变量。

        3
  •  0
  •   paxdiablo    16 年前

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

    • 使用所需的函数(与原始函数同名)创建新的库文件。
    • 将其放在与原始目录不同的目录中。
    • 将库文件与原始文件建立依赖关系。
    • 更改ld_library_路径(或shlib_路径?)把我们的图书馆放在搜索链的第一位。

    这样,我们的功能首先被装载机接收,我们没有提供的功能都是由原始的提供的。

    这是很久以前的事了。AIX5L应该更像Linux(因此是L),因此它可能能够完全满足您的需要。

    或者,如果您有源代码,请使用myTime()对time()的调用进行munge操作,并提供您的函数。你不是在测试 确切地 同样的软件,但是这种微小变化的区别不应该重要。