This is a personal improved version of AndroidNativeEmu.Allow running android elf code on pc.
- Rewrite memory mapping module, fully support jemalloc
- More debug utils, pretty printing for instruction and memory.
- Some misc bug fix
- Stop all runing when getting exception instead of just skiping one emulator runing for easily bug detecting...
- Support ELF DT_INIT call
- Auto Load dependency so.
- Auto generate /proc/[pid]/maps according to current memory map
- Fix R_ARM_ABS32 relocation bug.
- Use program header to load so instead of section header
- Support Java reflection
- Simulate linker TLS initialization.
- Support well known virtual file like /proc/self/maps...
Get rid of dependency on Section Header when loading ELF.
In the future this will be possible through pypi.
Make sure you are using python 3.7.
- Clone the repository
- Run
pip install -r requirements.txt
- Run
python example_jni.py
If you have trouble getting the
keystone-engine
dependency on Windows (as I did):
- Clone their repository
- Open a terminal in
bindings/python
- Run
python setup.py install
(Make sure you are using python 3.7)- Download their
Windows - Core engine
package here for your python arch.- Put the
keystone.dll
inC:\location_to_python\Lib\site-packages\keystone\
.
- 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