我正在尝试根据 webassembly 的模块结构文档识别 wasm 二进制模块的每个部分。我已经完成了部分认可,如下所示:
红色代码被标记为“魔术代码”;
深橙色的代码被标记为“版本号”;
浅黄色的代码被标记为第一部分的“id”;
深绿色的代码被标记为“varuint7”格式的“payload length”;
我不确定如何识别接下来的部分,对哪个部分是“有效载荷数据”有点困惑?“最后一个当前部分的结尾必须与模块的最后一个字节重合”是什么意思。在官方文档中写道。
我正在尝试根据 webassembly 的模块结构文档识别 wasm 二进制模块的每个部分。我已经完成了部分认可,如下所示:
红色代码被标记为“魔术代码”;
深橙色的代码被标记为“版本号”;
浅黄色的代码被标记为第一部分的“id”;
深绿色的代码被标记为“varuint7”格式的“payload length”;
我不确定如何识别接下来的部分,对哪个部分是“有效载荷数据”有点困惑?“最后一个当前部分的结尾必须与模块的最后一个字节重合”是什么意思。在官方文档中写道。
我建议查看现有的 WebAssembly 二进制解析器以帮助理解。这是WebKit 之一。
每个部分都以特定于部分的方式进行解码,如二进制格式文档中所述。您查看id
and payload_length
,然后根据您解码相应部分的部分 ID。从该页面部分编号是:
此外,0 是“自定义”。
转到每个部分的描述以了解如何解码它们。
“最后一个当前部分的结尾必须与模块的最后一个字节重合。” 意味着如果您解码一个部分,并且解码的长度与有效负载数据不匹配,那么这是一个验证错误。