Projekt

Obecné

Profil

Stáhnout (1.33 KB) Statistiky
| Větev: | Revize:
1 3a515b92 cagy
# @webassemblyjs/wasm-edit
2
3
> Rewrite a WASM binary
4
5
Replace in-place an AST node in the binary.
6
7
## Installation
8
9
```sh
10
yarn add @webassemblyjs/wasm-edit
11
```
12
13
## Usage
14
15
Update:
16
17
```js
18
import { edit } from "@webassemblyjs/wasm-edit";
19
20
const binary = [/*...*/];
21
22
const visitors = {
23
  ModuleImport({ node }) {
24
    node.module = "foo";
25
    node.name = "bar";
26
  }
27
};
28
29
const newBinary = edit(binary, visitors);
30
```
31
32
Replace:
33
34
```js
35
import { edit } from "@webassemblyjs/wasm-edit";
36
37
const binary = [/*...*/];
38
39
const visitors = {
40
  Instr(path) {
41
    const newNode = t.callInstruction(t.indexLiteral(0));
42
    path.replaceWith(newNode);
43
  }
44
};
45
46
const newBinary = edit(binary, visitors);
47
```
48
49
Remove:
50
51
```js
52
import { edit } from "@webassemblyjs/wasm-edit";
53
54
const binary = [/*...*/];
55
56
const visitors = {
57
  ModuleExport({ node }) {
58
    path.remove()
59
  }
60
};
61
62
const newBinary = edit(binary, visitors);
63
```
64
65
Insert:
66
67
```js
68
import { add } from "@webassemblyjs/wasm-edit";
69
70
const binary = [/*...*/];
71
72
const newBinary = add(actualBinary, [
73
  t.moduleImport("env", "mem", t.memory(t.limit(1)))
74
]);
75
```
76
77
## Providing the AST
78
79
Providing an AST allows you to handle the decoding yourself, here is the API:
80
81
```js
82
addWithAST(Program, ArrayBuffer, Array<Node>): ArrayBuffer;
83
editWithAST(Program, ArrayBuffer, visitors): ArrayBuffer;
84
```
85
86
Note that the AST will be updated in-place.