在多拱设置中使用/etc/ld.so.preload

Bil*_*ees 7 linux loader segmentation-fault

有没有办法使用ld.so.preload并覆盖32位和64位二进制文​​件?

如果我在ld.so.preload中列出了故障处理程序的32位和64位版本,那么加载程序总是抱怨其中一个版本无法为我运行的任何命令预加载.不完全是大地震动,因为错误更多是一个警告,但我当然可以没有打印输出.

希望加载器在arch适当的路径中选择lib(32位版本在/ lib中,64位版本在/ lib64中),而不是指定绝对路径,我试图简单地指定"segv_handler.so".

显然不太可能.

有没有办法设置ld.so.preload在架构上意识到?或者,如果没有,有什么方法可以关闭错误信息?

小智 5

这有效:

  1. 将库放在/path/lib 下的32 位,将64 位的放在/path/lib64 下,它们应该具有相同的名称
  2. 将以下行放在 /etc/ld.so.preload 中:/path/$LIB/libname.so

$LIB 将自动获取值“lib”(32 位)或“lib64”(64 位)。


Bri*_*ain 1

可悲的是,我认为答案可能是“不要这样做”。

glibcelf/rtld.c

通常没有 ld.so.preload 文件,它应该仅用于紧急情况和测试。因此,公开调用等通常会失败。对不存在的文件使用 access() 比使用 open() 更快。所以我们首先这样做。如果成功,我们几乎会做两倍的工作,但这并不重要,因为它不用于生产用途。