You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
1.3 KiB
86 lines
1.3 KiB
# @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.
|
|
|