2012-09-28 70 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

相關問題