0

Android2.3内部的libdvm.so,我可以使用代码调用dexFileParse代码: void * handle=dlopen("/system/lib/libdvm.so",RTDL_LAZY); 无效*pFunc=dlsym(句柄,“dexFileParse”);


但是libdvm.so导出_Z16dexFileParseXXX,我不会从dlsym(handle,"dexFileParse")中得到dexFileParse的地址。你说:你可以dlsym(handle,"_Z16dexFileParseXXX"),是的,可以,但是_Z16* * **XXX是cplusplus的编译器重命名的,不知道编译器的时候不能用cplusplus 的


我怎样才能调用 dexFileParse?

谢谢

4

1 回答 1

0

当源代码从 更改为 时,符号.c更改.cpp。该dexFileParse函数是 libdex 的一部分,并不公开。您不仅不能依赖具有特定值的名称修饰,而且不能依赖函数存在或按预期工作的事实。

如果您的用例可以接受使用私有 API,那么使用dlsym(即 try dexFileParse, then _Z16dexFileParseXXX) 探测函数应该没问题。如果这是不可接受的,那么您应该尝试找到一个公共 API 来处理您尝试解决的问题。

于 2013-08-30T06:01:55.740 回答