1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- # @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.
|