2013-08-30 35 views
0

libdvm.so裏面的Android2.3,我可以使用代碼來調用dexFileParse 代碼: void * handle = dlopen(「/ system/lib/libdvm.so」,RTDL_LAZY); void * pFunc = dlsym(handle,「dexFileParse」);Android4.2 libdvm.so無法找到dexFileParse的功能


但libdvm.so出口_Z16dexFileParseXXX,我不會從 的dlsym(手柄, 「dexFileParse」)獲得dexFileParse的地址。 你說:你可以dlsym(句柄,「_ Z16dexFileParseXXX」),是的,它會好的, 但是_Z16 * * ** XXX被cplusplus的編譯器改名,我不能用它當我不' t知道cplusplus的編譯器


我該如何調用dexFileParse?

感謝

回答

0

符號改變時,源代碼改變從.c.cppdexFileParse函數是libdex的一部分,並不公開。你不僅不能依靠名字having a specific value,你不能依賴這個功能的存在或工作,因爲你期望的事實。

如果使用私有API可以接受您的用例,那麼使用dlsym(即嘗試dexFileParse,然後_Z16dexFileParseXXX)探測該函數應該沒問題。如果這是不可接受的,那麼你應該嘗試找到一個公共API來處理你正在嘗試解決的問題。

+0

非常感謝! – olggun

+0

@olggun http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – krsteeve