wasm-edit
Edit and instrument already compiled Wasm binaries
Install
cargo install wasm-edit
Edit the main memory
Change the initial memory amount (in pages):
wasm-edit edit-memory --initial-memory=1000 < input.wasm > output.wasm
Trace calls to memory.grow
Trace calls to the memory.grow instruction:
wasm-edit instrument-memory < input.wasm > output.wasm
Requires Wasi, but doesn't require any change on the host. Tested with Rust and theoretically working with C/C++ (clang).
Coredump generation
Add the coredump generation:
wasm-edit coredump < input.wasm > output.wasm
When WebAssembly encounters a unreachable instruction it will unwind
the stack, collect informations and generate a coredump.
The coredump struct is stored at a fixed location, this might conflict with other transformations like asyncify.
Collect the entire WebAssembly memory and use wasmgdb to analyze.
Running into stack overflow
Some Wasm binaries have very recursive flow of control, increase the maximum stack size:
$ ulimit -s 160000