1
我知道有RTLD_LOCAL標誌,它阻止來自加載庫的符號進入全局範圍。但問題是,無法阻止加載的庫隨後使用RTLD_GLOBAL調用dlopen,從而將符號插入到全局範圍。防止從壓倒一切的符號dlopen'd庫
有沒有辦法來防止這種情況發生?
我知道有RTLD_LOCAL標誌,它阻止來自加載庫的符號進入全局範圍。但問題是,無法阻止加載的庫隨後使用RTLD_GLOBAL調用dlopen,從而將符號插入到全局範圍。防止從壓倒一切的符號dlopen'd庫
有沒有辦法來防止這種情況發生?
但問題是沒有辦法阻止加載的庫然後用RTLD_GLOBAL調用dlopen,從而將符號插入到全局範圍。
,在你的進程中運行代碼庫可以做一個億的事情:它可以破壞你的堆,修補可執行文本,覆蓋您已經解決,而不是尚未解決GOT
條目,重定向打開的文件描述符不同的文件或插座等等。
擔心它可能dlopen
東西有點沒有意義。如果你真的想把它從你的流程中分離出來,可以用不同的流程來運行它。
但是,如果由於某種原因,你只關心dlopen
,並沒有別的這個庫可以做,你會發現該庫的dlopen
GOT
項,將其設置爲my_dlopen
,這要麼總是返回NULL
,或者清除RTLD_GLOBAL
位在打電話給真正的dlopen
之前。