You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Josh Auten 3d9e5ca66e
Support OSX installation in Makefile
4 years ago
examples decompile wasmdec with wasmdec 4 years ago
external Update binaryen 4 years ago
release compress release dir after everything is said and done 4 years ago
src remove underscore in local names 4 years ago
test Add test suite decompilation test script 4 years ago
wasmdec.js update wasmdec.js to build 19 4 years ago
.gitignore ignore and remove .vscode/ 4 years ago
.gitmodules Add WebAssembly test suite as a submodule 4 years ago
LICENSE MIT License 5 years ago
Makefile Support OSX installation in Makefile 4 years ago add demo section to README 4 years ago compress release dir after everything is said and done 4 years ago


wasmdec is a program that converts WebAssembly binaries to C.


An online real-time WebAssembly decompiler utilizing wasmdec is avalible here

Simple Example

wasmdec will translate this WebAssembly binary:

	(func $addTwo (param i32 i32) (result i32)
			(i32.add (get_local 0) (get_local 1))
	(export "addTwo" $addTwo)

To the following pseudo-C code:

int fn_addTwo(int arg0, int arg1) {
	return arg0 + arg1;

More practical examples (HTML5 web game written in C++ and compiled to WASM) is a real time web game written in C++ and compiled to WebAssembly via Emscripten.


wasmdec is capable of decompiling itself back to C.

WebDSP (a signal processing library compiled to WASM)

From the WebDSP repository:

WebDSP is a collection of highly performant algorithms, which are designed to be building blocks for web applications that aim to operate on media data. The methods are written in C++ and compiled to WASM, and exposed as simple vanilla Javascript functions developers can run on the client side.


A CTF write-up which uses wasmdec to reverse engineer a WASM binary

Installing with release

  • Grab a release on the releases page and select the correct tarball for your OS and arch.
  • Extract and run as root.

Installing manually

Getting the code

Clone the repository with

git clone --recursive

Make sure the recursive flag is set to clone all the submodules.


To build wasmdec and install all of it's dependencies, run sudo make all in the wasmdec directory. GCC 7 or higher is reccomended.


wasmdec -o (output file) (options) [input files]

Where options is one of:

  • -e or --extra : Emits extra function information as comments:
    • Raw WebAssembly names of functions
    • Number of local variables and parameters of functions
  • -m or --memdump :
    • Dumps the binary's memory and table to disk
    • NOTE : memdump ONLY dumps memory and doesn't actually do any decompilation
  • -d or --debug : Print extra debug information to stdout
  • If no output file is specified, the default is out.c
  • When more than one input file is provided, wasmdec will decompile each WebAssembly to the same output file. Functions from more than one file are prefixed by their module name in order to prevent ambiguous function definitions.