Android4.2 libdvm.so Не могу найти функцию dexFileParse
libdvm.so внутри Android2.3, я могу использовать код для вызова кода dexFileParse: void * handle=dlopen("/system/lib/libdvm.so",RTDL_LAZY); void *pFunc=dlsym(handle,"dexFileParse");
но libdvm.so экспортирует _Z16dexFileParseXXX, я не получу адрес dexFileParse из dlsym (дескриптор "dexFileParse"). вы говорите: вы можете использовать dlsym (дескриптор "_Z16dexFileParseXXX"), да, все будет в порядке, но _Z16 **** XXX переименован компилятором cplusplus, я не могу использовать его, когда не знаю компилятор cplusplus
Как я могу вызвать dexFileParse?
Спасибо
1 ответ
Символ изменился, когда исходный код был изменен с .c
в .cpp
, dexFileParse
Функция является частью libdex и не является публичной. Вы не только не можете полагаться на искажение имени, имеющее конкретное значение, вы также не можете полагаться на тот факт, что функция существует или работает так, как вы ожидаете.
Если использование частного API приемлемо для вашего случая использования, то поиск функции с dlsym
(т.е. попробуйте dexFileParse
, затем _Z16dexFileParseXXX
) все должно быть в порядке. Если это неприемлемо, попробуйте найти общедоступный API, который решает проблему, которую вы пытаетесь решить.