ShadowHook Version
2.0.0
Android OS Version
15
Android ABIs
arm64-v8a
Device Manufacturers and Models
Realme 5 Pro
Describe the Bug
int ret = shadowhook_init(SHADOWHOOK_MODE_UNIQUE, false);
// ret == 12 ("Init linker mod failed")
shadowhook_init() fails during sh_linker_init() → sh_linker_get_symbol_info() → xdl_dsym() returns NULL for linker internal symbols.
sh_linker_get_symbol_info() fails on arm64-v8a, API 35. The function tries to resolve from linker64:
- __dl__ZN6soinfo17call_constructorsEv
- __dl__ZN6soinfo16call_destructorsEv
SH_LINKER_HOOK_WITH_DL_MUTEX is 0 on arm64, so g_dl_mutex is not involved.
The symbols exist in the binary (verified via strings):
$ strings /apex/com.android.runtime/bin/linker64 | grep call_.*structor
__dl__ZN6soinfo17call_constructorsEv
__dl__ZN6soinfo16call_destructorsEv
xdl_dsym() returns NULL for both symbols despite their presence. The cause is unknown — could be symbol table layout changes, visibility changes, or XDL iteration behavior on Android 15.
No ANDROID_API_V (API 35) definitions exist anywhere in the ShadowHook codebase. The symbol selection logic uses api_level >= ANDROID_API_M as a catch-all for API 23+.
The failure cascades: sh_linker_get_symbol_info() returns -1 → sh_linker_init() returns -1 → shadowhook_init() returns error 12. All hooking APIs become unusable afterward.
#include "shadowhook.h"
int ret = shadowhook_init(SHADOWHOOK_MODE_UNIQUE, false);
// Always returns 12 on Android 15, arm64-v8a
ShadowHook Version
2.0.0
Android OS Version
15
Android ABIs
arm64-v8a
Device Manufacturers and Models
Realme 5 Pro
Describe the Bug
shadowhook_init() fails during sh_linker_init() → sh_linker_get_symbol_info() → xdl_dsym() returns NULL for linker internal symbols.
sh_linker_get_symbol_info() fails on arm64-v8a, API 35. The function tries to resolve from linker64:
SH_LINKER_HOOK_WITH_DL_MUTEX is 0 on arm64, so g_dl_mutex is not involved.
The symbols exist in the binary (verified via strings):
xdl_dsym() returns NULL for both symbols despite their presence. The cause is unknown — could be symbol table layout changes, visibility changes, or XDL iteration behavior on Android 15.
No ANDROID_API_V (API 35) definitions exist anywhere in the ShadowHook codebase. The symbol selection logic uses api_level >= ANDROID_API_M as a catch-all for API 23+.
The failure cascades: sh_linker_get_symbol_info() returns -1 → sh_linker_init() returns -1 → shadowhook_init() returns error 12. All hooking APIs become unusable afterward.