#include #include #include #include #include "../core/core.hpp" // The reference layout of this struct // https://cs.android.com/android/platform/superproject/main/+/main:art/libnativebridge/include/nativebridge/native_bridge.h struct NativeBridgeCallbacks { uint32_t version; void *padding[5]; bool (*isCompatibleWith)(uint32_t); }; 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); } } return false; } extern "C" [[maybe_unused]] NativeBridgeCallbacks NativeBridgeItf{ .version = 2, .padding = {}, .isCompatibleWith = &is_compatible_with, };