3
我想在Linux中實現一些自定義庫函數。例如,我要實現我自己的pthread_mutex_lock ,調用pthread_mutex_unlock,的malloc和免費功能。我已閱讀LD_PRELOAD可用於使用您自己的自定義功能,雖然我沒有深入細節。庫函數的新實現,並在該函數內調用舊實現
但我有一個問題,我也想在我的新實現中使用原始函數。這樣做的訣竅是什麼,因爲兩者都有相同的名稱?
我想在Linux中實現一些自定義庫函數。例如,我要實現我自己的pthread_mutex_lock ,調用pthread_mutex_unlock,的malloc和免費功能。我已閱讀LD_PRELOAD可用於使用您自己的自定義功能,雖然我沒有深入細節。庫函數的新實現,並在該函數內調用舊實現
但我有一個問題,我也想在我的新實現中使用原始函數。這樣做的訣竅是什麼,因爲兩者都有相同的名稱?
您可以使用dlopen
函數來打開要替換的庫(或者,如果RTLD_NEXT已經加載,請參閱註釋),然後使用dlsym
函數查找該庫中要調用的函數的地址。
聽起來像一個不錯的想法,將研究它。謝謝! – MetallicPriest
你甚至不需要打開你正在插入的庫 - 使用'dlsym(RLTD_NEXT,「function」)'應該足以找到原始實現。 – caf
是的,我後來意識到它,忘記編輯我的答案! –