An ARM emulator in Python for educational purposes
epater (Environnement de Programmation ARM Téléopéré pour l'Éducation et la Recherche) is an ARM assembler and emulator targeted for academic and learning purposes. It is composed of three independent parts:
Unlike many other ARM emulators which interpret ARM assembly, epater is actually emulating an ARM CPU. This means that one can observe the bytecode in memory, change it on the fly and let the emulator run with the modified bytecode.
First ensure that you have installed all the required dependencies:
pip install -r requirements.txt
Once the repository is cloned, generate the i18n resource files:
python utils/po2mo.py
Thereafter, launch a local version of the system using this command:
python mainweb.py DEBUG
The system will then be available at http://127.0.0.1:8000/.
epater may run in CLI mode (use main.py instead of mainweb.py), in which case it does not need web server components.
On client side, the following browsers are supported :
Other configurations may work as well, but have not been tested.
epater was primarily designed with portability and ease of use in mind. While its speed is more than sufficient for most educational applications, it is not suitable for complex ARM programs emulation. Pypy may be used to speed up the simulator and we recommand uvloop for the server side. The simulator is not multi-threaded. Here are some performance measurements under various conditions:
Details | Performance (instr/sec) |
---|---|
Simulator only | 50K |
Simulator only with pypy | 140K |
Simulator + web server | 48K |
Simulator + web server + step by step | 5K |
Test configuration : Core i7 6800K, 64 GB RAM, Python 3.6 (using uvloop for the web server) / Pypy3 5.10
These features are currently unsupported, but might be included in a future release.
These features are not of great use in a simulation context and/or for academic purposes. Also, a feature may be in this list if the implementation burden is too high compared to its benefits. There is currently no plan to implement them, nor to merge a pull request doing so, except some special circumstances.
epater is distributed under GPLv3 license (see LICENSE).