You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Gadget SIGSEGV at startup on 32-bit Android (armeabi-v7a): GumUnwindBroker arm32 activation faults in gum_interceptor_replace() on Bionic #1124
On 32-bit Android (armeabi-v7a, Bionic), the frida-gadget crashes with a SIGSEGV
during its own bootstrap — before any script is loaded — inside the new GumUnwindBroker arm32 activation path. The same build runs fine on arm64-v8a.
This is a regression introduced by the unwind broker (absent in pre-17.10 builds,
which worked on the same devices).
Environment
frida-gum 17.10.0 → current (GumUnwindBroker present); reproduced with a gadget
built from frida-gum 17.15.x.
Mode: Gadget, ABI armeabi-v7a (32-bit ARM).
OS: Android 11, Bionic libc, on an embedded Android device.
arm64-v8a builds of the exact same frida are unaffected.
Symptom
The gadget faults at init, before running the configured script (no script output at all):
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x24
Cause: null pointer dereference
r0 00000000 ... r11 00000034
backtrace:
#00 pc 006d3870 .so (single frame, inside the gadget)
r0 == 0 and the faulting access is [r0 + 0x24] — a struct-field deref on a NULL
object, deep in the interceptor replace machinery.
Root cause
gum_interceptor_obtain() now obtains the unwind broker on creation
(guminterceptor.c: interceptor->unwind_broker = gum_unwind_broker_obtain();), and
that runs during gum_init bootstrap. On 32-bit ARM, _gum_unwind_broker_backend_activate() (the #ifdef HAVE_ARM branch in gum/backend-linux/gumunwindbroker-linux.c) does, at startup:
Activity