87 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # @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.
 |