使用LD_PRELOAD指定多个文件

Met*_*est 43 c linux x86 dynamic

我知道如何用LD_PRELOAD覆盖一个库,例如,如下所示.

LD_PRELOAD =./ getpid.so ./testpid

现在我的问题是如何覆盖多个文件.假设我想覆盖getpid和getid,我该如何指定?

Wil*_*ell 54

根据手册页,它是一个空格分隔列表.所以:

LD_PRELOAD="path1 path2"

应该工作.

  • 根据man-page冒号也被接受,例如:`LD_PRELOAD = path1:path2` (7认同)
  • 有趣。在LD_LIBRARY_PATH的部分中,页面提到分号和冒号有效,但未提及空格。(我认为)$ ORIGIN,$ LIB和$ PLATFORM的解析是新的。空格总是有点令人惊讶,我发现它们在LD_PRELOAD中有效但在LD_LIBRARY_PATH中无效,这很奇怪。 (2认同)
  • 请注意,日期为2001的页面(来自https://www.kernel.org/pub/linux/docs/man-pages/Archive/man-pages-2.00.tar.bz2)指出:“ LD_PRELOAD:以空格分隔的列表用户指定的其他ELF共享库中的第一个要先加载。” 我找不到binutils的更改,并且很想知道这仅仅是文档中的遗漏还是行为最近有所更改。 (2认同)

cod*_*ict 5

一种选择是将两者的覆盖版本放在一个单独的版本中,getpid并提供给.getid.soLD_PRELOAD