Unicorn.js

The Unicorn emulator framework, now available for JavaScript.

Download » Github » Unicorn »

Demo

Program
0x
0x
0x
Machine state trapped
at
0x
Run a program to inspect memory.

Information

Unicorn.js is a port of the Unicorn emulator framework for JavaScript+WASM, powered by Emscripten. The released bundle supports the architectures: ARM, ARM64, M68K, MIPS, PowerPC, RISC-V, S390X, SPARC, TriCore and x86. Per-platform Unicorn.js releases are also available here. Follow the Readme to build Unicorn.js manually.

Unicorn is a lightweight multi-architecture CPU emulator framework originally developed by Nguyen Anh Quynh et al. and released under GPLv2.

Installation

To use Unicorn.js in your web application, download and include it with:

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

or install it with the NPM command:

npm install @alexaltea/unicorn-js

Tutorial

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();
});