linkerpatch
android N linker patch
android N 以后,采用 namespace 对 so 加载进行隔离,详细:https://developer.android.com/about/versions/nougat/android-7.0-changes.html#ndk
linker patch 提供以下 API 绕过上述限制:
extern "C" void addHook(const char src, const char dst);
extern "C" void delHook(const char* src);
extern "C" void addHijack(const char src, const char dst)
extern "C" void delHijack(const char* src)
extern "C" void addTrampoline(const char srcSo, const char srcSym, const char dstSo, const char dstSym, const char* cond);
extern "C" void delTrampoline(const char srcSo, const char srcSym);
extern "C" void initLinkerPatch();
功能说明:
1、初始化调用 initLinkerPatch 后,可以突破路径和权限的访问限制(解决 dlopen 返回 null);
2、addHook:用于替换 namespace 对 dst 进行加载(常见使用:动态链接其他 namespace 的 so);如 addHook("libUE4.so", "libxue4.so"), 游戏加载 libUE4.so 到某个 namespace,addhook 后再调用 dlopen 加载 libxue4.so 时,会使用 libUE4.so 的 namespace 进行加载。
3、addHijack::用于替换 so 进行加载;
4、addTrampoline:用于替换 dlsym 函数查找
