gpt4 book ai didi

c++ - C/C++ : How to find out the own library name

转载 作者:太空狗 更新时间:2023-10-29 12:09:49 24 4
gpt4 key购买 nike

我想在 Linux 系统上拦截一个动态加载的共享库 libA.so。LD_PRELOAD 不起作用,因为 libA.so 已显式 打开。共享库的函数可以确定其库名吗?然后我可以将一些原始的 libA.so 移动到 libA-org.so。并用新的 libA.so 替换它,它本身加载 libA-org.so 并包装它。还是有一些更简单/更好的方法?

好吧,我可以使用积极的方法。有一个加载 *.so 文件的通用框架(公共(public)接口(interface))。我可以扩展该框架并让它检查包装图像。但是我很好奇,是否有一种非侵入式的方式。

最佳答案

Can a function of a shared library determine its library name?

是的,尽管您正在寻找的解决方案是特定于操作系统的。如果您对基于 GNU libc 的方法感兴趣,您应该查看 dladdr(3) .

该函数可以使用自己的地址获取托管库的路径:

const char *location(void)
{
Dl_info info;
dladdr(&location, &info);
return info->dli_fname;
}

根据Boost.Dll,这个函数应该在QNX、Android、Solaris、MacOS和一些BSD上也可用,但我自己没有检查过。

或者你可以直接使用Boost.Dll。它以跨平台的方式包含了所需的一切。

关于c++ - C/C++ : How to find out the own library name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48650674/

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