我对我的应用程序使用了哪些库和系统调用感到好奇,而它的running.So我开始研究我的应用程序与LD_PRELOAD和一些“系统调用”,如打开,访问和编写。
但是当我试图预加载dlopen时,为了找出加载了哪些库,我得到了这个错误: Symbol not found:
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。也许你能帮我..。
提前感谢
发布于 2018-04-04 09:50:43
Android dlopen是由链接器提供的,因此在从预加载的库中查找dlopen符号时,您需要使用RTLD_DEFAULT。请参阅:bionic/libdl/libdl.c和bionic/linker/linker.cpp
https://stackoverflow.com/questions/30772984
复制相似问题