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

时间:2018-01-07 12:22:59

标签: webassembly

我正在使用我自己的webAssembly JS中的一个bug来编译。我不确定我的尺寸格式是否正确以及限制是什么

例如,127字节的数据段

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

然后用128字节

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

我猜测高位如果打开则表示后面会有一个字节。这意味着下一步将是

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总是off和数字代表nibit位顺序。

  • 这是正确的,可以用这种格式表示的最大值是什么?

  • 这是唯一的尺寸格式吗?

  • 是否有一种标准算法可以将表示长度的Javascript数字转换为此格式,因为目前我的解决方案非常难以解决?

1 个答案:

答案 0 :(得分:2)

Wasm二进制格式对所有整数使用LEB128格式。在大小特别unsigned LEB128的情况下。但是,与一般的LEB128不同,Wasm施加了最大长度,请参阅the specification

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