gpt4 book ai didi

shared-libraries - Linux 二进制文件找不到共享库,但在 strace 中运行时可以工作

转载 作者:行者123 更新时间:2023-12-04 07:28:04 25 4
gpt4 key购买 nike

(注意:下面的二进制和二进制和库的名称被混淆以保护无辜者。;-) 该应用程序在 NDA 下是专有的,但行为可能不依赖于它。)

我有一个 Linux 二进制文件,它在运行时会打印以下错误:

binary: error while loading shared libraries: libshared.so: cannot open shared object file: No such file or directory

由于 libshared.so 在 LD_LIBRARY_PATH 中,这本身就令人困惑。然而,

  • 运行ldd binary时正确找到库(即ldd输出指向文件位置)

  • 在运行 strace binary 时正确找到该库,以便程序设法打印其使用信息!

我从未见过单独运行与在 strace 中运行时行为不同的应用程序,但我想也许其他人以前见过这种情况?任何想法如何解决这个问题?

我没有源,所以我无法重建。在 strace 下在生产环境中运行该应用程序可能不是一个初学者。操作系统是 RHEL 6.2。

最佳答案

(老问题,但希望这对其他人有帮助)

在新的 Linux 安装下,标准系统运行时链接器不会将 LD_LIBRARY_PATH 用于设置了 SUID 的程序。看来 strace、gdb 和 friend 的工作方式不同,确实使用 LD_LIBRARY_PATH。

对于 suid 程序,必须在系统库缓存中找到所有库。检查(以 root 身份)您的“丢失”库是否存在使用

ldconfig -p | grep <my_library_name>

如果缺少任何内容,请将其添加到/etc/ld.so.conf 或 ld.so.conf.d/中的新文件中,然后使用

重建
ldconfig -v

当然,如果不需要,也可以删除 SUID 位。

关于shared-libraries - Linux 二进制文件找不到共享库,但在 strace 中运行时可以工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18130790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com