代码如下
static void *findSymbol(const char *path, const char *symbol) {
void *handle = dlopen(path, RTLD_LAZY);
if(!handle) {
LOGE("handle %s is null", path);
return NULL;
}
//Cydia::MSHookFunction(void *,void *,void **)
void *target = dlsym(handle, symbol);
if(!target) {
LOGE("symbol %s is null", symbol);
}
return target;
}
void *target = findSymbol("libc.so", "__system_property_get");
dlopen打开失败:
dlopen第三方动态库时经常会发生打开失败的错误,可以适用dlerror()函数查看具体错误:
void *dlh;
dlh = dlopen("libdes3-32.so", RTLD_NOW | RTLD_GLOBAL);
if (dlh == NULL)
{
printf("dlopen err:%s.\n",dlerror());
}