|
|
- # @webassemblyjs/wasm-edit
-
- > Rewrite a WASM binary
-
- Replace in-place an AST node in the binary.
-
- ## Installation
-
- ```sh
- yarn add @webassemblyjs/wasm-edit
- ```
-
- ## Usage
-
- Update:
-
- ```js
- import { edit } from "@webassemblyjs/wasm-edit";
-
- const binary = [/*...*/];
-
- const visitors = {
- ModuleImport({ node }) {
- node.module = "foo";
- node.name = "bar";
- }
- };
-
- const newBinary = edit(binary, visitors);
- ```
-
- Replace:
-
- ```js
- import { edit } from "@webassemblyjs/wasm-edit";
-
- const binary = [/*...*/];
-
- const visitors = {
- Instr(path) {
- const newNode = t.callInstruction(t.indexLiteral(0));
- path.replaceWith(newNode);
- }
- };
-
- const newBinary = edit(binary, visitors);
- ```
-
- Remove:
-
- ```js
- import { edit } from "@webassemblyjs/wasm-edit";
-
- const binary = [/*...*/];
-
- const visitors = {
- ModuleExport({ node }) {
- path.remove()
- }
- };
-
- const newBinary = edit(binary, visitors);
- ```
-
- Insert:
-
- ```js
- import { add } from "@webassemblyjs/wasm-edit";
-
- const binary = [/*...*/];
-
- const newBinary = add(actualBinary, [
- t.moduleImport("env", "mem", t.memory(t.limit(1)))
- ]);
- ```
-
- ## Providing the AST
-
- Providing an AST allows you to handle the decoding yourself, here is the API:
-
- ```js
- addWithAST(Program, ArrayBuffer, Array<Node>): ArrayBuffer;
- editWithAST(Program, ArrayBuffer, visitors): ArrayBuffer;
- ```
-
- Note that the AST will be updated in-place.
|