libdl如何与android中的链接器一起使用?

问题描述 投票:1回答:1

我们知道,/system/bin/linker负责动态链接机制,但是libdl具有实际在动态链接器(dlfcn.c)中定义并在运行时被劫持的函数的存根,如下所示:

#include <dlfcn.h>
/* These are stubs for functions that are actually defined
 * in the dynamic linker (dlfcn.c), and hijacked at runtime.
 */
void *dlopen(const char *filename, int flag) { return 0; }
const char *dlerror(void) { return 0; }
void *dlsym(void *handle, const char *symbol) { return 0; }
int dladdr(const void *addr, Dl_info *info) { return 0; }
int dlclose(void *handle) { return 0; }

void android_update_LD_LIBRARY_PATH(const char* ld_library_path) { }

#if defined(__arm__)

void *dl_unwind_find_exidx(void *pc, int *pcount) { return 0; }

#elif defined(__i386__) || defined(__mips__)

/* we munge the cb definition so we don't have to include any headers here.
 * It won't affect anything since these are just symbols anyway */
int dl_iterate_phdr(int (*cb)(void *info, void *size, void *data), void *data) { return 0; }

#else
#error Unsupported architecture. Only mips, arm and x86 are supported.
#endif

那么劫持何时以及如何发生?如果您可以在android开源中向我展示代码,将不胜感激。

android linker shared-libraries android-source loader
1个回答
1
投票

根据您的问题,尚不清楚您对哪个Android版本感兴趣,但似乎您正在使用的是较旧的Android版本(假设它使用dlfcn.c而不是dlfcn.cpp)。我将讨论基于Android 6的劫持过程。

对于较新的Android版本,过程基本相同,但是某些方法名称和文件名已更改。

© www.soinside.com 2019 - 2024. All rights reserved.