我正在为 Linux 机器开发一个共享库,它是通过 rpath 相对于主可执行文件动态加载的。
现在,库本身尝试相对于其位置动态加载其他库,但没有 rpath(我使用 scandir 来搜索某个文件夹中的共享库 - 我还不知道它们的名称)。
仅当工作目录设置为共享库位置时,这才有效,否则我将按预期查看不同的目录。
有没有实用、可靠的方法让共享库确定它所在的位置?
我知道,我可以使用 /proc/self/maps 或类似的东西来获取加载的文件,但这只有在库知道自己的名称时才有效。
另一个想法是使用 dlinfo(),但是要使用它,共享库需要知道它自己的句柄。
共享库有没有什么实用、可靠的方法
确定它驻留在哪里?
I'd use dlinfo
and /proc/self/maps
(proc
可能并不总是安装的,尤其是在容器中)。
我知道,我可以使用 /proc/self/maps 或类似的东西,
获取加载的文件,但这仅适用于库
知道自己的名字。
并非如此,您可以获取指向库内某些代码的指针(最好指向某些内部标签,以避免弄乱 PLT/GOT),并将结果与从以下位置获得的内存范围进行比较/proc/self/maps
(or dlinfo
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)