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

ClassPath
Moduleunidbg-api/.../Module.java
DalvikModuleunidbg-android/.../dvm/DalvikModule.java
DalvikVMunidbg-android/.../dvm/DalvikVM.java
VM (interface)unidbg-android/.../dvm/VM.java
AndroidResolverunidbg-android/.../linux/android/AndroidResolver.java