Capstone.js
Port of the Capstone disassembler framework for JavaScript. Powered by Emscripten.
Notes: Capstone is a lightweight multi-architecture disassembly framework originally developed by Nguyen Anh Quynh and released under BSD license. More information about contributors and license terms can be found in the files CREDITS.TXT
and LICENSE.TXT
of the capstone submodule in this repository.
Installation
To add Capstone.js to your web application, include it with:
<script src="capstone.min.js"></script>
or install it with the NPM command:
npm install @alexaltea/capstone-js
or install it with the Bower command:
bower install capstonejs
Usage
// Input: Machine code bytes and offset where they are located
var buffer = [0x55, 0x31, 0xD2, 0x89, 0xE5, 0x8B, 0x45, 0x08];
var offset = 0x10000;
// Initialize the decoder
var d = new cs.Capstone(cs.ARCH_X86, cs.MODE_32);
// Output: Array of cs.Instruction objects
var instructions = d.disasm(buffer, offset);
// Display results;
instructions.forEach(function (instr) {
console.log("0x%s:\t%s\t%s",
instr.address.toString(16),
instr.mnemonic,
instr.op_str
);
});
// Delete decoder
d.close();
Building
To build the Capstone.js library, clone the master branch of this repository, and do the following:
-
Initialize the original Capstone submodule:
git submodule update --init
. -
Install the latest Python 2.x (64-bit), CMake and the Emscripten SDK. Follow the respective instructions and make sure all environment variables are configured correctly. Under Windows MinGW (specifically mingw32-make) is required.
-
Install the development dependencies with:
npm install
. -
Finally, build the source with:
grunt build
.
Note: To use WebAssembly, change WASM=0
to WASM=1
in build.py
.
It will automatically load the .wasm
binary, but you should wait for it to load:
cs.MCapstone.then(() => {
// ... initialize and use Capstone here ....
});