void *get_base_of_lib_from_soinfo(char *soname) {
    if (soname == NULL)
        return NULL;
    void *imagehandle = dlopen(soname, RTLD_LOCAL | RTLD_LAZY);
    if (imagehandle == NULL) {
        return NULL;
    }
    char *basename;
    char *searchname;
    int i;
    void *libdl_ptr = dlopen("libdl.so", 3);
    basename = strrchr(soname, '/');
    searchname = basename ? basename + 1 : soname;
    for (i = (int) libdl_ptr; i != NULL; i = *(int *) (i + 164)) {
        if (!strcmp(searchname, (char *) i)) {
            unsigned int *lbase = (unsigned int *) i + 140;
            void *baseaddr = (void *) *lbase;
            return baseaddr;
        }
    }
    return NULL;
}

参考链接:https://koz.io/android-substrate-c-hooking/

你可能感兴趣的文章

评论区

发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。