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: |
|||
|
|||
1. When building Wasmtime, add the CLI flag "--features wmemcheck" to compile with wmemcheck configured. |
|||
> cargo build --features wmemcheck |
|||
2. When running your wasm module, add the CLI flag "--wmemcheck". |
|||
> 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