Repository navigation
agent: Retry emulated load through LoadLibraryExt - #1286
Merged
Merged
Conversation
Houdini v3 rejects the deprecated NativeBridgeLoadLibrary() entrypoint and returns NULL, which surfaces as "Process is not using emulation". When the plain call fails and the extended entrypoint is available, retry through it with a null namespace.
oleavr
force-pushed
the
fix/emulated-load-library-ext
branch
from
November 5, 2026 10:29
59d2643 to
c233517
Compare
Member
|
Thanks! 🙌 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes frida/frida#3814.
On LDPlayer 14 (Android 14, x86_64, libhoudini) the emulated realm fails to attach with "Process is not using emulation". The native bridge exports the modern symbols, so
NativeBridgeApi.open()classifies it asMODERN, andget_emulated_provider()takes theload_library()branch. Houdini v3 refuses that deprecated entrypoint and returns NULL:The
LoadLibraryExt()path is gated onflavor == LEGACY, so it is never tried.I verified the call sequence in the target process on LDPlayer 14 with Frida scripts, using
libnativebridge.sofrom/apex/com.android.art/lib64/and the same emulated-agent path:NativeBridgeLoadLibrary(path, RTLD_LAZY)0x0(Houdini logs the deprecation warning)NativeBridgeLoadLibraryExt(path, RTLD_LAZY, NULL)NativeBridgeGetTrampoline(handle, "JNI_OnLoad")This patch keeps the existing behavior and only retries through
LoadLibraryExt()when the plain call fails and the export is available, with a null namespace (accepted by Houdini v3; the legacy branch keeps its existing hard-coded namespace pointer).Testing: the native-bridge calls above were verified on the device with Frida 17.24.1 (client and server). I could not run a full frida-core build here, so CI will be the first compile of the change.