https://github.com/AeonLucid/AndroidNativeEmu
  
  
    Allows you to partly emulate an Android native library. 
    https://github.com/AeonLucid/AndroidNativeEmu
  
android android-native-library arm emulator unicorn
        Last synced: 7 months ago 
        JSON representation
    
Allows you to partly emulate an Android native library.
- Host: GitHub
 - URL: https://github.com/AeonLucid/AndroidNativeEmu
 - Owner: AeonLucid
 - License: gpl-3.0
 - Created: 2018-07-09T14:44:28.000Z (over 7 years ago)
 - Default Branch: master
 - Last Pushed: 2025-02-13T23:10:05.000Z (9 months ago)
 - Last Synced: 2025-03-27T02:00:33.571Z (7 months ago)
 - Topics: android, android-native-library, arm, emulator, unicorn
 - Language: Python
 - Size: 1.22 MB
 - Stars: 1,436
 - Watchers: 59
 - Forks: 414
 - Open Issues: 11
 - 
            Metadata Files:
            
- Readme: README.md
 - License: LICENSE.txt
 
 
Awesome Lists containing this project
- awesome-hacking-lists - AeonLucid/AndroidNativeEmu - Allows you to partly emulate an Android native library. (Python)
 
README
          # AndroidNativeEmu
[](https://github.com/AeonLucid/AndroidNativeEmu/actions)
[](https://pypi.org/project/androidemu/)

Allows you to partly emulate an Android native library.
This is an educational project to learn more about the ELF file format and [Unicorn](https://github.com/unicorn-engine/unicorn).
> Read me for chinese readers [中文README](README_cn.md)
## Features
- Emulation of the [JNI Invocation API](https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/invocation.html) so `JNI_OnLoad` can be called properly.
- Emulation of native memory for malloc / memcpy.
- Emulation of syscalls (SVC #0) instruction.
- Hooking through the symbol table.
- All JavaVM, JNIEnv and hooked functions are handled by python.
- Enable VFP support.
## Installation
You can install AndroidNativeEmu with pip.
```
pip install androidemu
```
## TODO
- Improve file descriptors in `vfs/file_system.py` so they are re-useable.
- Add a way for the VirtualFileSystem to give back dynamic files, such as `/proc/self/status`, `/proc/self/status` but also `/dev/urandom`.
- Library consumers must be able to easily rebuild the needed Java classes for a native library, which are used by the native library through the JNIEnv.
  - ~~Classes~~
  - ~~Objects~~
  - ~~Methods~~
  - ~~Native methods~~
  - Fields
  - Types
  - Reflection
## Dependencies
- [Unicorn CPU emulator framework](https://github.com/unicorn-engine/unicorn)
- [Keystone assembler framework](https://github.com/keystone-engine/keystone)
## Resources
All resources used while developing AndroidNativeEmu.
### Text sources
- https://greek0.net/elf.html
- https://stackoverflow.com/questions/13908276/loading-elf-file-in-c-in-user-space
- https://programtalk.com/python-examples/pyelftools.elftools.elf.relocation.Relocation/
- http://infocenter.arm.com/help/topic/com.arm.doc.ihi0044f/IHI0044F_aaelf.pdf
- https://wiki.osdev.org/ELF_Tutorial
- https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/functions.html
- https://android.googlesource.com/platform/dalvik/+/donut-release/vm/Jni.c
### Code sources
- https://github.com/lunixbochs/usercorn
- https://github.com/slick1015/pad_unpacker (SVC 0 instruction)