Browse Source
* wmemcheck: update docs. This PR expands the documentation for the Wasm memchecker (`wmemcheck`) feature significantly, and also links it from the top-level documentation hierarchy. * Add syntax/language annotations to quotation sections to keep mdbook happy.pull/6857/head
Chris Fallin
1 year ago
committed by
GitHub
2 changed files with 44 additions and 1 deletions
@ -1,8 +1,50 @@ |
|||||
|
# Wasm memcheck (wmemcheck) |
||||
|
|
||||
Wmemcheck provides debug output for invalid mallocs, reads, and writes. |
wmemcheck provides the ability to check for invalid mallocs, reads, and writes |
||||
|
inside a Wasm module, as long as Wasmtime is able to make certain assumptions |
||||
|
(`malloc` and `free` functions are visible and your program uses only the |
||||
|
default allocator). This is analogous to the Valgrind tool's memory checker |
||||
|
(memcheck) tool for native programs. |
||||
|
|
||||
How to use: |
How to use: |
||||
|
|
||||
1. When building Wasmtime, add the CLI flag "--features wmemcheck" to compile with wmemcheck configured. |
1. When building Wasmtime, add the CLI flag "--features wmemcheck" to compile with wmemcheck configured. |
||||
> cargo build --features wmemcheck |
> cargo build --features wmemcheck |
||||
2. When running your wasm module, add the CLI flag "--wmemcheck". |
2. When running your wasm module, add the CLI flag "--wmemcheck". |
||||
> wasmtime run --wmemcheck test.wasm |
> wasmtime run --wmemcheck test.wasm |
||||
|
|
||||
|
If your program executes an invalid operation (load or store to non-allocated |
||||
|
address, double-free, or an internal error in malloc that allocates the same |
||||
|
memory twice) you will see an error that looks like a Wasm trap. For example, given the program |
||||
|
|
||||
|
```c |
||||
|
#include <stdlib.h> |
||||
|
|
||||
|
int main() { |
||||
|
char* p = malloc(1024); |
||||
|
*p = 0; |
||||
|
free(p); |
||||
|
*p = 0; |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
compiled with WASI-SDK via |
||||
|
|
||||
|
```plain |
||||
|
$ /opt/wasi-sdk/bin/clang -o test.wasm test.c |
||||
|
``` |
||||
|
|
||||
|
you can observe the memory checker working like so: |
||||
|
|
||||
|
```plain |
||||
|
$ wasmtime run --wmemcheck ./test.wasm |
||||
|
Error: failed to run main module `./test.wasm` |
||||
|
|
||||
|
Caused by: |
||||
|
0: failed to invoke command default |
||||
|
1: error while executing at wasm backtrace: |
||||
|
0: 0x103 - <unknown>!__original_main |
||||
|
1: 0x87 - <unknown>!_start |
||||
|
2: 0x2449 - <unknown>!_start.command_export |
||||
|
2: Invalid store at addr 0x10610 of size 1 |
||||
|
``` |
||||
|
Loading…
Reference in new issue