Skip to content

shadowhook_init() fails with error 12 ("Init linker mod failed") on Android 15 (API 35) #113

@HanSoBored

Description

@HanSoBored

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions