bin+lib wasmonkey

Patch a WASM object file to replace a set of exported functions with imported functions from another library

18 releases

0.1.17 Jan 16, 2023
0.1.16 May 27, 2022
0.1.15 Jan 4, 2022
0.1.13 May 31, 2021
0.1.4 May 31, 2018

#536 in WebAssembly

24 downloads per month
Used in 5 crates (via lucetc)

ISC license

38KB
1K SLoC

Rust 671 SLoC // 0.0% comments GNU Style Assembly 430 SLoC C 73 SLoC

Contains (Mach-o exe, 9KB) src/a.out

WASMonkey

The WASMonkey patches a WASM object file to replace a set of exported functions with imported functions from another library.

Usage

USAGE:
    wasmonkey [FLAGS] [OPTIONS] --input <input_file> --output <output_file>

FLAGS:
    -n, --original-names    Use the original name as a key in the builtins map
    -h, --help              Prints help information
    -V, --version           Prints version information

OPTIONS:
    -B, --builtins-additional <builtins_additional>...    Additional builtins function names to replace
    -b, --builtins <builtins_file>                        Path to the builtins library
    -m, --builtins-map <builtins_map_file>                Path to the builtins map file
    -i, --input <input_file>                              Path to the input file
    -o, --output <output_file>                            Path to the output file

builtins_file is an object containing alternative implementations to functions called in the wasm code.

Symbols starting with a builtin_ prefix will be used for substitution.

For example, a memmove() function defined as an external in the WASM object will be replaced by calls to an imported builtin_memmove() function, if builtin_memmove() is present in the builtins file.

A JSON-encoded map of the performed substitutions can be optionally written into builtins_map_file.

Dependencies

~6–18MB
~213K SLoC