2026-03-27 02:24:37 +05:30
2026-03-27 02:24:37 +05:30

wasm-runtime

A WebAssembly runtime for KolibriOS, written in FASM.

Currently builds as a Linux binary for easier development and testing. The final target is KolibriOS native format.

What it does right now

Parses a .wasm binary and prints out everything it finds — sections, types, imports, exports, and function signatures in a readable format:

$ ./src/wasm test/wasm/add.wasm
Valid wasm file
File size: 41 bytes
Section 1 (Type), size: 7 bytes
  type 0: (i32, i32) -> (i32)
Section 3 (Function), size: 2 bytes
  func 0 -> type 0
Section 7 (Export), size: 7 bytes
  export "add" -> func 0
Section 10 (Code), size: 9 bytes
  body 0: 7 bytes
Function index: 1 entries
  func 0 -> type 0 (local)
Function signatures:
  i32 add(i32, i32)

What's implemented

  • wasm binary header validation (magic number + version)
  • LEB128 decoding (unsigned and signed)
  • section enumeration (all 13 section types recognized)
  • type section parsing (function signatures with i32/i64/f32/f64)
  • import section parsing (functions, tables, memories, globals)
  • export section parsing
  • function section + code section parsing
  • unified function index (imports first, then locals, per spec)
  • human-readable function signature output

Build

fasm src/wasm.asm src/wasm
chmod +x src/wasm

Test

sh test/build_wasm.sh   # compile .wat files to .wasm (needs wat2wasm)
sh test/run_tests.sh    # run from repo root

Structure

src/
  wasm.asm       main entry point
  leb128.inc     LEB128 variable-length integer decoder
  sections.inc   section parsers
test/
  wat/           source .wat files
  wasm/          compiled .wasm binaries
  build_wasm.sh  compiles wat -> wasm
  run_tests.sh   test runner
S
Description
A wasm runtime in fasm
Readme
37 KiB
0 Stars 1 Watchers 0 Forks
Languages
Assembly 89.3%
Shell 8.8%
WebAssembly 1.9%