Skip to content

AlexAltea/unicorn.js

Repository files navigation

Unicorn.js

Port of the Unicorn CPU emulator framework for JavaScript/WASM. Powered by Emscripten.

Requirements: JavaScript environment with WebAssembly and BigInt support.

Notes: Unicorn is a lightweight multi-architecture CPU emulator framework originally developed by Nguyen Anh Quynh, Dang Hoang Vu et al. and released under GPLv2 license. More information about contributors and license terms can be found in the files AUTHORS.TXT, CREDITS.TXT and COPYING inside the unicorn submodule of this repository.

Installation

To add Unicorn.js to your web application, include it with:

<script src="unicorn.js"></script>

Usage

var addr = 0x10000;
var code = [
  0x37, 0x00, 0xA0, 0xE3,  // mov r0, #0x37
  0x03, 0x10, 0x42, 0xE0,  // sub r1, r2, r3
];

MUnicorn().then((uc) => {
    // Initialize engine
    var e = new uc.Unicorn(uc.ARCH_ARM, uc.MODE_ARM);

    // Write registers and memory
    e.reg_write_i32(uc.ARM_REG_R2, 0x456);
    e.reg_write_i32(uc.ARM_REG_R3, 0x123);
    e.mem_map(addr, 4*1024, uc.PROT_ALL);
    e.mem_write(addr, code);

    // Start emulator
    var begin = addr;
    var until = addr + code.length;
    e.emu_start(begin, until, 0, 0);

    // Read registers
    var r0 = e.reg_read_i32(uc.ARM_REG_R0);  // 0x37
    var r1 = e.reg_read_i32(uc.ARM_REG_R1);  // 0x333

    e.close();
});

Building

To build the Unicorn.js library:

  1. Clone this repository including its submodules:

    git clone --recursive https://github.com/AlexAltea/unicorn.js
  2. Install the latest Python 3.x, CMake and the Emscripten SDK. Follow the corresponding instructions and make sure all environment variables are configured correctly.

  3. Run the build script:

    python3 build.py build

Build artifacts will be saved to dist.

Tip

Pass an architecture name to produce a smaller, single-architecture bundle (e.g. python3 build.py build x86).

About

Unicorn CPU emulator framework port for JavaScript

Resources

License

Stars

Watchers

Forks

Contributors