diff --git a/native/jni/zygisk/hook.cpp b/native/jni/zygisk/hook.cpp index 47763fc66..2ce384084 100644 --- a/native/jni/zygisk/hook.cpp +++ b/native/jni/zygisk/hook.cpp @@ -367,6 +367,8 @@ void HookContext::run_modules_pre(const vector &fds) { if (void *e = dlsym(h, "zygisk_module_entry")) { modules.emplace_back(i, h, e); } + } else if (g_ctx->state[SERVER_SPECIALIZE]) { + LOGW("Failed to dlopen zygisk module: %s\n", dlerror()); } close(fds[i]); } diff --git a/native/jni/zygisk/main.cpp b/native/jni/zygisk/main.cpp index ed2b812c2..29a8e1106 100644 --- a/native/jni/zygisk/main.cpp +++ b/native/jni/zygisk/main.cpp @@ -112,14 +112,19 @@ static void zygiskd(int socket) { vector modules; { vector module_fds = recv_fds(socket); - char buf[256]; for (int fd : module_fds) { - snprintf(buf, sizeof(buf), "/proc/self/fd/%d", fd); comp_entry entry = nullptr; - if (void *h = dlopen(buf, RTLD_LAZY)) { + android_dlextinfo info { + .flags = ANDROID_DLEXT_USE_LIBRARY_FD, + .library_fd = fd, + }; + if (void *h = android_dlopen_ext("/jit-cache", RTLD_LAZY, &info)) { *(void **) &entry = dlsym(h, "zygisk_companion_entry"); + } else { + LOGW("Failed to dlopen zygisk module: %s\n", dlerror()); } modules.push_back(entry); + close(fd); } }