我有两个共享库。一个lib通过使用dlopen
加载lib B.两个共享库实现相同的API
它们实现相同的一组API。
我的客户端运行在同一个系统上,当它试图访问它将加载的库时,
或者这是一件无效的事情吗?我必须让B成为一个静态库。
我的目标是让客户端只访问的lib A.
我有两个共享库。一个lib通过使用dlopen
加载lib B.两个共享库实现相同的API
它们实现相同的一组API。
我的客户端运行在同一个系统上,当它试图访问它将加载的库时,
或者这是一件无效的事情吗?我必须让B成为一个静态库。
我的目标是让客户端只访问的lib A.
您在客户端(即,你可以重新编译)的控制权?如果是这样,您可以在链接时指定库A;那么这将是A的护理dlopen
B.
如果您正试图劫持调用函数B中foo
,那么你的客户端试图加载库B.可以使用LD_PRELOAD
强制它加载库中的,而不是。然后,客户端将发出foo()
的呼叫,并由A应答,在修改,更改和/或记录输入值和返回值后,A将能够将呼叫路由到foo()@B
。
您用LD_PRELOAD=B.so ./client
而不是./client
致电您的客户。
非常感谢您的评论! – user1706239
这个答案http://stackoverflow.com/a/6538625/1095974可能对你有用。 – chyx