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.
To add Unicorn.js to your web application, include it with:
<script src="unicorn.js"></script>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();
});To build the Unicorn.js library:
-
Clone this repository including its submodules:
git clone --recursive https://github.com/AlexAltea/unicorn.js
-
Install the latest Python 3.x, CMake and the Emscripten SDK. Follow the corresponding instructions and make sure all environment variables are configured correctly.
-
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).