diff --git a/native/src/core/zygisk/entry.cpp b/native/src/core/zygisk/entry.cpp index b33b09694..e8def767d 100644 --- a/native/src/core/zygisk/entry.cpp +++ b/native/src/core/zygisk/entry.cpp @@ -16,25 +16,11 @@ using namespace std; void *self_handle = nullptr; string native_bridge = "0"; -extern "C" [[maybe_unused]] void zygisk_inject_entry(void *handle) { - self_handle = handle; - zygisk_logging(); - hook_functions(); - ZLOGD("load success\n"); -} - static bool is_compatible_with(uint32_t) { auto name = get_prop(NBPROP); - android_dlextinfo info = { - .flags = ANDROID_DLEXT_FORCE_LOAD - }; - void *handle = android_dlopen_ext(name.data(), RTLD_LAZY, &info); - if (handle) { - auto entry = reinterpret_cast(dlsym(handle, "zygisk_inject_entry")); - if (entry) { - entry(handle); - } - } + android_logging(); + hook_functions(); + ZLOGD("load success\n"); return false; } diff --git a/native/src/core/zygisk/hook.cpp b/native/src/core/zygisk/hook.cpp index a70e37482..53f970305 100644 --- a/native/src/core/zygisk/hook.cpp +++ b/native/src/core/zygisk/hook.cpp @@ -187,6 +187,7 @@ DCL_HOOK_FUNC(static int, pthread_attr_destroy, void *target) { if (should_unmap_zygisk) { g_hook->restore_plt_hook(); if (should_unmap_zygisk) { + ZLOGV("dlclosing self\n"); delete g_hook; // Because both `pthread_attr_destroy` and `dlclose` have the same function signature, @@ -202,13 +203,12 @@ DCL_HOOK_FUNC(static int, pthread_attr_destroy, void *target) { // it should be safe to assume all dlclose's in libnativebridge are for zygisk_loader DCL_HOOK_FUNC(static int, dlclose, void *handle) { - static bool kDone = false; - if (!kDone) { + if (!self_handle) { ZLOGV("dlclose zygisk_loader\n"); - kDone = true; + self_handle = handle; g_hook->post_native_bridge_load(); } - [[clang::musttail]] return old_dlclose(handle); + return 0; } #undef DCL_HOOK_FUNC diff --git a/native/src/exported_sym.txt b/native/src/exported_sym.txt index 802ae57bc..56850bc50 100644 --- a/native/src/exported_sym.txt +++ b/native/src/exported_sym.txt @@ -1,4 +1,3 @@ { - zygisk_inject_entry; NativeBridgeItf; };