共享库如何知道它所在的位置?

时间:2017-01-10 07:45:23

标签: linux shared-libraries dynamic-loading

我正在为linux机器开发一个共享库,它使用rpath相对于主可执行文件动态加载。 现在,库本身试图相对于其位置动态加载其他库但没有rpath(我使用scandir搜索某个文件夹中的共享库 - 我还不知道他们的名字)。

仅当工作目录设置为共享库位置时才有效,否则我会按预期查看其他目录。

共享库是否有任何实用,可靠的方法来确定它所在的位置?

我知道,我可以使用/ proc / self / maps或类似的东西来获取加载的文件,但只有库知道它自己的名字才能正常工作。

另一个想法是使用dlinfo(),但要使用它,共享库需要知道自己的句柄。

1 个答案:

答案 0 :(得分:1)

  

共享库是否有任何实用,可靠的方法   确定它所在的位置?

我使用dlinfo/proc/self/mapsproc可能并非总是挂载,尤其是在容器中。

  

我知道,我可以使用/ proc / self / maps或类似的东西,   获取加载的文件,但这只适用于库   知道自己的名字。

实际上,您可以指向库中的一些代码(最好是一些内部标签,以避免弄乱PLT / GOT)并将结果与​​从/proc/self/maps(或dlinfo获得的内存范围进行比较})。