2017-05-11 45 views
1

我知道有RTLD_LOCAL標誌,它阻止來自加載庫的符號進入全局範圍。但問題是,無法阻止加載的庫隨後使用RTLD_GLOBAL調用dlopen,從而將符號插入到全局範圍。防止從壓倒一切的符號dlopen'd庫

有沒有辦法來防止這種情況發生?

回答

1

但問題是沒有辦法阻止加載的庫然後用RTLD_GLOBAL調用dlopen,從而將符號插入到全局範圍。

,在你的進程中運行代碼可以做一個億的事情:它可以破壞你的堆,修補可執行文本,覆蓋您已經解決,而不是尚未解決GOT條目,重定向打開的文件描述符不同的文件或插座等等。

擔心它可能dlopen東西有點沒有意義。如果你真的想把它從你的流程中分離出來,可以用不同的流程來運行它。

但是,如果由於某種原因,你關心dlopen,並沒有別的這個庫可以做,你會發現該庫的dlopenGOT項,將其設置爲my_dlopen,這要麼總是返回NULL,或者清除RTLD_GLOBAL位在打電話給真正的dlopen之前。