关于dvmLoadNativeCode的相关方法(调试时可以利用)

来源:互联网 发布:大连软件职业学院面积 编辑:程序博客网 时间:2024/05/22 05:16
bool dvmLoadNativeCode(const char* pathName, Object* classLoader,        char** detail){    SharedLib* pEntry;    void* handle;    ......    pEntry = findSharedLibEntry(pathName);    if (pEntry != NULL) {        if (pEntry->classLoader != classLoader) {            ......            return false;        }        ......        if (!checkOnLoadResult(pEntry))            return false;        return true;    }    ......    handle = dlopen(pathName, RTLD_LAZY);    ......    /* create a new entry */    SharedLib* pNewEntry;    pNewEntry = (SharedLib*) calloc(1, sizeof(SharedLib));    pNewEntry->pathName = strdup(pathName);    pNewEntry->handle = handle;    pNewEntry->classLoader = classLoader;    ......    /* try to add it to the list */    SharedLib* pActualEntry = addSharedLibEntry(pNewEntry);     if (pNewEntry != pActualEntry) {        ......        freeSharedLibEntry(pNewEntry);        return checkOnLoadResult(pActualEntry);    } else {        ......        bool result = true;        void* vonLoad;        int version;        vonLoad = dlsym(handle, "JNI_OnLoad");        if (vonLoad == NULL) {            LOGD("No JNI_OnLoad found in %s %p, skipping init\n",                pathName, classLoader);        } else {            ......            OnLoadFunc func = vonLoad;            ......            version = (*func)(gDvm.vmList, NULL);            ......            if (version != JNI_VERSION_1_2 && version != JNI_VERSION_1_4 &&                version != JNI_VERSION_1_6)            {                .......                result = false;            } else {                LOGV("+++ finished JNI_OnLoad %s\n", pathName);            }        }        ......        if (result)            pNewEntry->onLoadResult = kOnLoadOkay;        else            pNewEntry->onLoadResult = kOnLoadFailed;        ......        return result;    }} 

0 0
原创粉丝点击