2012-09-28 51 views
0

我有两个共享库。一个lib通过使用dlopen加载lib B.两个共享库实现相同的API

它们实现相同的一组API。

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

或者这是一件无效的事情吗?我必须让B成为一个静态库。

我的目标是让客户端只访问的lib A.

+3

这个答案http://stackoverflow.com/a/6538625/1095974可能对你有用。 – chyx

回答

0

您在客户端(即,你可以重新编译)的控制权?如果是这样,您可以在链接时指定库A;那么这将是A的护理dlopen B.

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

您用LD_PRELOAD=B.so ./client而不是./client致电您的客户。

+0

非常感谢您的评论! – user1706239

相关问题