c - 两个共享库实现相同的 API

标签 c linux shared-libraries shared

我有两个共享库。 A lib 使用 dlopen 加载 lib B。

它们实现相同的 API 集。

我的客户端在同一系统上运行,当它尝试访问 API 时,它将加载哪个库?

或者这是无效的事情?我必须将 B 设为静态库。

我的目标是让客户端仅访问库 A。

最佳答案

您是否可以控制客户端(即您可以重新编译它)?如果是这样,你可以在链接时指定库A;那么 dlopen B 就由 A 负责了。

如果您试图劫持 B 中对函数 foo 的调用,那么您的客户端正在尝试加载库 B。您可以使用 LD_PRELOAD 强制它加载改为库 A。然后客户端将调用 foo() 并由 A 应答,修改后 A 将能够将调用路由到 foo()@B,更改和/或记录输入值和返回值。

您使用 LD_PRELOAD=B.so ./client 而不是 ./client 来调用您的客户端。

关于c - 两个共享库实现相同的 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12639985/

相关文章:

c - 循环重复 scanf 和 printf

linux - 导出不通过另一个脚本工作

linux - 如何使用_PAGE_BIT_SOFTW1?

c++ - CMake add_library(<lib> OBJECT <src>) 有环境变量吗?

c - Windows 中的用户空间 APC 队列长度

c - 我无法通过 NETLINK_ROUTE 选项通过 Netlink 套接字设置特定接口(interface)(eth0 或 eth1)的 MTU 大小

git - 解决gcc中undefined reference library linking error

c++ - ldd找不到库

c - 警告 : comparison is always true due to limited range of data type

linux - 如何递归地查看目录中的文件,删除特定模式并将其写入同一层次结构中的新文件名