wastrumentation

Portable WebAssembly Dynamic Analysis with Support for Intercession

https://github.com/aaronmunsters/wastrumentation

Science Score: 57.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 6 DOI reference(s) in README
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (13.7%) to scientific vocabulary

Keywords

instrumentation intercession webassembly
Last synced: 6 months ago · JSON representation ·

Repository

Portable WebAssembly Dynamic Analysis with Support for Intercession

Basic Info
  • Host: GitHub
  • Owner: aaronmunsters
  • License: other
  • Language: Rust
  • Default Branch: main
  • Homepage:
  • Size: 1.13 MB
Statistics
  • Stars: 8
  • Watchers: 4
  • Forks: 1
  • Open Issues: 0
  • Releases: 1
Topics
instrumentation intercession webassembly
Created over 2 years ago · Last pushed 6 months ago
Metadata Files
Readme License Citation

README.md

Wastrumentation

DOI

The Wastrumentation Architecture

Portable WebAssembly Dynamic Analysis with Support for Intercession

About

Wastrumentation is a dynamic analysis platform for WebAssembly that supports intercession. Wastrumentation is based on source code instrumentation, which weaves the analysis code directly into the target program code. Inlining the analysis into the target’s source code avoids dependencies on the runtime environment, making analyses portable across different Wasm VMs. Wastrumentation's approach enables the implementation of analyses in any Wasm-compatible language.

The architecture figure above describes the inner workings of Wastrumentation. Writing the input analysis directly in WebAssembly is tedious, this repository includes two DSLs that allow you to write your analysis in a high-level language, one for Rust and one for AssemblyScript.

Usage

Wastrumentation's dependencies can update over time. The CI file (in .github/workflows) installs the dependencies and verifies all tests still pass. Consider it the source of truth for the dependencies. The dependencies are NodeJS, wasm-merge (from binaryen), and Rust + Cargo.

The following describes the steps to execute Wastrumentation as a command-line executable: ```bash

Verify dependencies are present

$ node --version && wasm-merge --version && rustc --version && cargo --version

Clone the repository

$ git clone https://github.com/aaronmunsters/wastrumentation.git $ cd wastrumentation

Execute Wastrumentation

$ cargo run --bin wastrumentation-cli \ --input-program-path \ --rust-analysis-toml-path \ --output-path ```

You can view example analyses developed in Rust here and those developed in AssemblyScript here.

Publication Reference

This platform and the related research was published at ECOOP 2025:

Citation (BibTeX)

Use the following BibTeX entry to cite this work:

@InProceedings{munsters_et_al:LIPIcs.ECOOP.2025.23, author = {Munsters, A\"{a}ron and Scull Pupo, Angel Luis and {Gonzalez Boix}, Elisa}, title = {{Wastrumentation: Portable WebAssembly Dynamic Analysis with Support for Intercession}}, booktitle = {39th European Conference on Object-Oriented Programming (ECOOP 2025)}, pages = {23:1--23:29}, series = {Leibniz International Proceedings in Informatics (LIPIcs)}, ISBN = {978-3-95977-373-7}, ISSN = {1868-8969}, year = {2025}, volume = {333}, editor = {Aldrich, Jonathan and Silva, Alexandra}, publisher = {Schloss Dagstuhl -- Leibniz-Zentrum f{\"u}r Informatik}, address = {Dagstuhl, Germany}, URL = {https://drops.dagstuhl.de/entities/document/10.4230/LIPIcs.ECOOP.2025.23}, URN = {urn:nbn:de:0030-drops-233153}, doi = {10.4230/LIPIcs.ECOOP.2025.23}, annote = {Keywords: WebAssembly, dynamic analysis, instrumentation platform, intercession} }

Owner

  • Name: Aäron Munsters
  • Login: aaronmunsters
  • Kind: user
  • Location: Schaarbeek

I'm a computer scientist student at the VUB.

Citation (CITATION.cff)

cff-version: 1.2.0
title: >-
  Wastrumentation: Portable WebAssembly Dynamic Analysis
  with Support for Intercession
message: >-
  If you use Wastrumentation in your work, please cite the
  following paper.
type: software
authors:
  - family-names: Munsters
    given-names: Aäron
  - family-names: Scull Pupo
    given-names: Angel Luis
  - family-names: Gonzalez Boix
    given-names: Elisa
identifiers:
  - type: doi
    value: 10.4230/LIPIcs.ECOOP.2025.23
  - type: url
    value: 'https://doi.org/10.4230/LIPIcs.ECOOP.2025.23'
repository-code: 'https://github.com/aaronmunsters/wastrumentation'
url: 'https://doi.org/10.4230/LIPIcs.ECOOP.2025.23'
keywords:
  - WebAssembly
  - dynamic analysis
  - intercession
  - instrumentation
license: CC-BY-4.0
version: 0.1.0
date-released: '2025-07-01'

GitHub Events

Total
  • Watch event: 4
  • Delete event: 1
  • Push event: 18
  • Public event: 1
  • Pull request event: 2
  • Fork event: 1
  • Create event: 1
Last Year
  • Watch event: 4
  • Delete event: 1
  • Push event: 18
  • Public event: 1
  • Pull request event: 2
  • Fork event: 1
  • Create event: 1

Dependencies

.github/workflows/cargo-build-test.yml actions
  • actions/checkout v4 composite
  • actions/setup-python v5 composite
  • denoland/setup-deno v1 composite
  • taiki-e/install-action nextest composite
Cargo.toml cargo
benchmarking-node/input-analyses/rust/block-profiling/Cargo.toml cargo
benchmarking-node/input-analyses/rust/branches/Cargo.toml cargo
benchmarking-node/input-analyses/rust/call-graph/Cargo.toml cargo
benchmarking-node/input-analyses/rust/call-stack-eq-wasabi/Cargo.toml cargo
benchmarking-node/input-analyses/rust/call-stack-wastrumentation/Cargo.toml cargo
benchmarking-node/input-analyses/rust/coverage-branch/Cargo.toml cargo
benchmarking-node/input-analyses/rust/coverage-instruction/Cargo.toml cargo
benchmarking-node/input-analyses/rust/cryptominer-detection/Cargo.toml cargo
benchmarking-node/input-analyses/rust/denan/Cargo.toml cargo
benchmarking-node/input-analyses/rust/forward/Cargo.toml cargo
benchmarking-node/input-analyses/rust/globals/Cargo.toml cargo
benchmarking-node/input-analyses/rust/icount/Cargo.toml cargo
benchmarking-node/input-analyses/rust/loops/Cargo.toml cargo
benchmarking-node/input-analyses/rust/memory-tracing/Cargo.toml cargo
benchmarking-node/input-analyses/rust/memstats/Cargo.toml cargo
benchmarking-node/input-analyses/rust/opcodes/Cargo.toml cargo
benchmarking-node/input-analyses/rust/safe-heap/Cargo.toml cargo
benchmarking-node/input-analyses/rust/taint/Cargo.toml cargo
benchmarking-node/wasmtime-benchmarks/Cargo.toml cargo
cli/Cargo.toml cargo
wasm-merge/Cargo.toml cargo
  • wat 1.228.0 development
wasp-compiler/Cargo.toml cargo
  • pest-test 0.1.6 development
  • from-pest 0.3.3
  • pest 2.7
  • pest-ast 0.3.5
  • pest_derive 2.7
wastrumentation/Cargo.toml cargo
wastrumentation-instr-lib/Cargo.toml cargo
  • wasmtime-wasi 29.0 development
  • bitmask 0.5.0
wastrumentation-instr-lib/tests/analyses/rust/call-stack/Cargo.toml cargo
wastrumentation-instr-lib/tests/analyses/rust/forward/Cargo.toml cargo
wastrumentation-instr-lib/tests/analyses/rust/logging/Cargo.toml cargo
wastrumentation-instr-lib/tests/analyses/rust/pure-functions-memoization/Cargo.toml cargo
wastrumentation-instr-lib/tests/analyses/rust/signatures-check/Cargo.toml cargo
wastrumentation-instr-lib/tests/analyses/rust/wastrumentation-rs-stdlib/Cargo.toml cargo
wastrumentation-static-analysis/Cargo.toml cargo