dlopen dlsym dlclose等linux下的動態庫

1、dlsym查找的時候一定要注意函數名,需要在編譯so的時候,使用extern "C"{},不然編譯出來的名字是c++的,容易查不到

2、如果想要覆蓋系統函數,比如像覆蓋socket,read,write等,可以使用自己定義這些函數,然後在函數裏,調用真正的系統函數,爲了防止編譯錯誤,只能動態調用。dlsym(RTLD_NEXT,"socket"),這個RTLD_NEXT就是專門爲覆蓋動態庫而提供的,它會自動查找下一個shareObject的函數,跳過本so文件的定義。這樣還能覆蓋一些malloc等其他函數,做統計之類的。結合環境變量 LD_PRELOAD

 

具體參考:https://github.com/Tencent/libco/blob/master/co_hook_sys_call.cpp

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章