wasm 部分中大小字段的格式?

Format of size field in wasm sections?

我正在与我自己的 webAssembly JS 中的 wasm 编译器作斗争。我不确定我的尺寸格式是否正确以及限制是什么

例如127字节的数据段

00 41 00 0b 7f ...data
            ^^ size 127 bytes

然后用128字节

00 41 00 0b 8001 ...data
            ^^^^ size 128

我猜测高位if on表示后面会有一个字节。这意味着下一步将是

00 41 00 0b ff7f ...data
            ^^^^ size 16383

00 41 00 0b 808001 ...data
            ^^^^^^ size 16384

所以长度是 nibit 顺序(3 字节 6 nibits)103254 其中 nibits 1 和 3 设置了最高位使得查看位 S1110000 S3332222 A5554444 其中 S 总是打开并且 A始终关闭,数字代表 nibit 位顺序。

Wasm 二进制格式使用 LEB128 format for all integer numbers. In the case of sizes specifically unsigned LEB128. However, unlike general LEB128s, Wasm imposes a maximum length, see the specification.

您可以在网上找到大量 LEB128 encoding/decoding 的示例实现,例如,它是 Wasm reference interpreter(在 OCaml 中)中的一个 3 行函数。