我有兩個共享庫。一個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