Skip to main content

Description

A pure python ARM emulator

Installation

Install the last released version using pip:

python3 -m pip install --user -U armulator

Or install the latest version from sources:

git clone git@github.com:matan1008/armulator.git
cd pyiosbackup
python3 -m pip install --user -U -e .

Usage

To create a processor object, you need to import it first:

from armulator.armv6.arm_v6 import ArmV6

Then you can just create it:

arm = ArmV6()

Getting familiar with the Memory controller concept is crucial for using the processor.
In short, there is one "hub" to which you can connect several controllers.
A "Memory Controller" can be a stick of RAM, Memory mapped LCD screen or whatever you wish.

For example, let's create a RAM controller:

from armulator.armv6.memory_types import RAM
from armulator.armv6.memory_controller_hub import MemoryController

mem = RAM(0x100)
mc = MemoryController(mem, 0xF0000000, 0xF0000100)
arm.mem.memories.append(mc)

Now, trying to access a memory between 0xF0000000 and 0xF0000100, will access the mem object.
You can also change the memory manually:

mem.write(0, 2, "\xfe\xe7")

Another useful feature is playing with the memory protection or management unit, for example cancelling memory protection will look like:

arm.registers.sctlr.m = 0
arm.take_reset()

Please note that after changing internal features it is recommended to reset the processor.

When running the armulator, you will probably want to start from a defined address, so:

arm.registers.branch_to(0x100)

The last thing we need to do is to really run the processor, which can be done with:

arm.emulate_cycle()

Running the tests

Running the tests can be done easily with pytest:

python3 -m pytest tests -vv

Acknowledgments

  • At first, I did it to learn the ARM architecture better. I guess I was carried away.
  • Feel free to report bugs.
  • Feel free to ask for more features.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

armulator-1.1.3.tar.gz (122.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

armulator-1.1.3-py3-none-any.whl (537.4 kB view details)

Uploaded Python 3

File details

Details for the file armulator-1.1.3.tar.gz.

File metadata

  • Download URL: armulator-1.1.3.tar.gz
  • Upload date:
  • Size: 122.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.4

File hashes

Hashes for armulator-1.1.3.tar.gz
Algorithm Hash digest
SHA256 a193f43fb5863d6b65d5d0d2e3b6753cc2b619df4fd2bd15301aa32362f98325
MD5 42fd2479c8e192fe229dc41f21e618b8
BLAKE2b-256 9fc1cb4f719288c4969dfabc6cce4af7e94523864e84429ec07ea68599044bd4

See more details on using hashes here.

File details

Details for the file armulator-1.1.3-py3-none-any.whl.

File metadata

  • Download URL: armulator-1.1.3-py3-none-any.whl
  • Upload date:
  • Size: 537.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.4

File hashes

Hashes for armulator-1.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 20933f20eb525c973c4b44f48f9604446530c43a124a79e98c2dd06ab5a49387
MD5 581ae50c05ba055d48890f14ff00acbf
BLAKE2b-256 8c35b71920ea55726abaf6224dcb1a8232f70aab7009801478fa1be1450fecbe

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.1.3 This release

2 files

1.1.2

2 files

1.1.1

2 files

1.0.4

1 file

1.0.3

1 file

1.0.2

1 file

1.0.1

1 file

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page