2014-02-27 19 views
0

在cycript中,可以獲得對c function pointer的引用,但我一直無法使用該語法來檢索指向C++函數的指針,這些函數使用它們的合適函數名稱或函數名稱符號表。指向C++中的C++函數的指針

有沒有辦法從這裏到那裏?

更新:從Saurik公司的輸入

更新:

我從來沒有嘗試過的函數指針從C風格的符號,但是你是絕對正確的,領先的下劃線需要被剝離。 _DES_encrypt3需要訪問:

cy# dlsym(RTLD_DEFAULT, "DES_encrypt3") 
0x14dc19 

這給了我一個有效的指針地址。

當我看重整符號爲XMPP :: CapsManager ::〜CapsManager(),它是__ZN4xmpp11CapsManagerD2Ev_1bf718,我嘗試

cy# dlsym(RTLD_DEFAULT, "__ZN4xmpp11CapsManagerD2Ev_1bf718") 
null 
cy# dlsym(RTLD_DEFAULT, "_ZN4xmpp11CapsManagerD2Ev_1bf718") 
null 
cy# dlsym(RTLD_DEFAULT, "ZN4xmpp11CapsManagerD2Ev_1bf718") 
null 

這些變型中沒有一個產生一個指針。

回答

1

我的直接猜測是,你正在嘗試使用原始的mangled符號名稱(正如你所描述的,從符號表中獲取它),將它傳遞給dlsym ...但是dlsym需要一個C級別的符號名稱,意味着即使對於一個簡單的C符號,您的方法也不起作用:您在開始時會有一個額外的_(如果您檢查了符號表,您將看到C函數也被破壞,以_開頭)。如果你去掉前面的_,你應該可以使用dlsym來查找你的C++符號。

+0

我已經在原始問題中添加了一些細節。刪除額外的下劃線似乎是必要的,但我仍然沒有得到指針。 – JoshRivers

+0

你解決了嗎?我有同樣的問題 – mientus