master
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
Languages
Assembly
89.3%
Shell
8.8%
WebAssembly
1.9%