2011-05-15 25 views
3

是否可以使用dlsym從框架中加載已命名的未導出符號?用dlsym加載named unexported symbols?

我試圖導入符號有指其框架內提到了一個名字。這是我需要調用的一個函數。

我試圖做到這一點通常dlopen + dlsym方式,但是當我嘗試加載未導出的符號,dlsym返回NULL 指針

回答

2

dlsym還可以在其他的符號表中只列出了負載的功能。您可以通過在相關框架上運行nm來列出符號表。

可以在dyld的來源進行驗證: ImageLoaderMachOClassic::findExportedSymbol是內部實現的dlsym的,它只是二進制搜索符號表:

而且ImageLoaderMachO::parseLoadCmds負載符號表從馬赫頭負載命令:

+0

我這裏'dsymutil -s'顯示我的符號,但'dlsym'沒有找到它的情況。見[這裏](http://stackoverflow.com/questions/21849208/how-can-i-get-the-nsautoreleasenopool-address)。你怎麼能找到這樣的符號? – Albert 2014-02-18 12:02:11