Learn about our RFC process, Open RFC meetings & more.Join in the discussion! »

@webassemblyjs/wasm-edit

1.9.0 • Public • Published

@webassemblyjs/wasm-edit

Rewrite a WASM binary

Replace in-place an AST node in the binary.

Installation

yarn add @webassemblyjs/wasm-edit

Usage

Update:

import { edit } from "@webassemblyjs/wasm-edit";
 
const binary = [/*...*/];
 
const visitors = {
  ModuleImport({ node }) {
    node.module = "foo";
    node.name = "bar";
  }
};
 
const newBinary = edit(binary, visitors);

Replace:

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:

import { edit } from "@webassemblyjs/wasm-edit";
 
const binary = [/*...*/];
 
const visitors = {
  ModuleExport({ node }) {
    path.remove()
  }
};
 
const newBinary = edit(binary, visitors);

Insert:

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:

addWithAST(Program, ArrayBuffer, Array<Node>): ArrayBuffer;
editWithAST(Program, ArrayBuffer, visitors): ArrayBuffer;

Note that the AST will be updated in-place.

Keywords

none

Install

npm i @webassemblyjs/wasm-edit

DownloadsWeekly Downloads

10,205,540

Version

1.9.0

License

MIT

Unpacked Size

29.4 kB

Total Files

7

Last publish

Collaborators

  • avatar