WebAssembly 二进制格式文件解析
WebAssembly 二进制文件(模块)编码按照 section 区分, 除了将函数分为定义和代码实现两部分, 大多数部分与模块中保存的一个 section 相对应.
每个 section 包括:
section id, 大小一字节.
section size, 格式为 u32, 记录 section 大小.
data,section 中保存的实际内容, 格式取决于 section id.
每个 section 都是可选的, 如果某个 wasm 模块省略了某个 section, 则等同于存在一个内容为空的 section.
总共存在 11 种不同类型的 section, 它们分别是:
Id
Section
0
custom section
1
type section
2
import section
3
function section
4
table section
5
memory section
6
global section
7
export section
8
start section
9
element section
10
code section
11
data section
如果我此时直接将核心规范扔出来告诉你每个 section 的规则, 那可能会有点无聊, 因此我决定偷下懒, 我会使用一个真实的(且最小的) wasm 模块对其格式进行讲解, 并会要求你自学剩下的内容. 该模块文件由 C 编译而来, 其 C 源