1

我很好奇我的应用程序在运行时使用了哪些库和系统调用。所以我开始使用 LD_PRELOAD 和一些“系统调用”(如打开、访问和写入)调查我的应用程序。

但是,当我尝试预加载 dlopen 以找出加载了哪些库时,我收到了这个错误:找不到符号:

void* dlopen(const char *file, int mode){
    static void* (*o_dlopen) ( const char *file, int mode )=0;
    printf( "dlopen was called\n" );
    o_dlopen = (void*(*)(const char *file, int mode))   
    dlsym(RTLD_NEXT,"dlopen");
    return (*o_dlopen)( file, mode );
}

似乎是 dlsym 第二次找不到 dlopen 。我用 -ldl 和 android NDK 提供的 arm-gcc 编译了我的预加载 *.so 文件。使用 -rdynamic 也不起作用。

预加载工作正常,但不适用于 dlopen。也许你能帮我...

提前致谢

4

1 回答 1

0

Android由链接器dlopen提供,因此在从预加载的库中查找符号时需要使用。请参阅:仿生/libdl/libdl.c仿生/链接器/链接器.cppRTLD_DEFAULTdlopen

于 2018-04-04T01:50:43.073 回答