Loading Libraries
Loading Libraries
Load a SO directly
1// Load from file
2Module module = emulator.loadLibrary(new File("path/to/libnative.so"));
3
4// Force call init functions (.init_array, JNI_OnLoad)
5Module module = emulator.loadLibrary(new File("path/to/libnative.so"), true);
Module represents a loaded native library. Use it to call exported functions.
Load via DalvikVM (Android JNI)
1// Create VM (no APK — bare JNI)
2VM vm = emulator.createDalvikVM();
3
4// Create VM with APK (enables resource/asset access)
5VM vm = emulator.createDalvikVM(new File("path/to/app.apk"));
6
7// Load SO into VM
8DalvikModule dm = vm.loadLibrary(new File("path/to/libnative.so"), true);
9
10// Trigger JNI_OnLoad
11dm.callJNI_OnLoad(emulator);
Android API level
1// Set before loading libraries
2emulator.getMemory().setLibraryResolver(new AndroidResolver(23)); // API 23
AndroidResolver path: unidbg-android/.../linux/android/AndroidResolver.java
Resolve Java classes
1// Returns DvmClass (used for calling static methods)
2DvmClass cls = vm.resolveClass("com/example/MyClass");
3
4// Resolve with superclass / interfaces
5DvmClass cls = vm.resolveClass("com/example/MyClass",
6 vm.resolveClass("android/app/Activity"));
Key classes
| Class | Path |
|---|---|
Module | unidbg-api/.../Module.java |
DalvikModule | unidbg-android/.../dvm/DalvikModule.java |
DalvikVM | unidbg-android/.../dvm/DalvikVM.java |
VM (interface) | unidbg-android/.../dvm/VM.java |
AndroidResolver | unidbg-android/.../linux/android/AndroidResolver.java |