2016-01-18 70 views
0

我想要鉤住GCC的__cxa_throw,這樣我就能夠接收異常回溯而不會混淆異常對象本身。雖然它在可執行文件中運行良好,但它不適用於共享對象。使用靜態庫導出來滿足外部符號

我正在構建一個小型的靜態庫,它包含了鉤子本身,並將它重定向到我的函數中。而我的__cxa_throw很好地顯示爲.text部分中的導出符號。雖然它沒有幫助,即使使用LD的-Bsymbolix,-Bsymbolic函數。

所以問題是。我可以強制LD找到__cxa_throw的現有實現並使用它滿足外部符號嗎?

感謝

回答

0

首先,你的鉤子函數必須被編譯成目標文件,並鏈接到這樣造成的對象文件。似乎來自目標文件的符號比甚至像libstd這樣的默認導入具有更高的優先級。這應該已經滿足整個裏面的所有符號引用,這樣,包括在被鏈接的歸檔。

第二,如果你希望你的鉤子無法從外界可見,只要使用__attribute__((visibility("hidden")))

相關問題