混淆webassembly的二进制代码结构
Confusing on webassembly's binary code structure
我正在尝试根据 webassembly 的模块结构文档来识别 wasm 二进制模块的每个部分。我已经完成了一部分识别,如下所示:
screenshot
红色代码被标记为"magic code";
深橙色代码被标记为 "version number";
浅黄色代码被标记为第一部分的"id";
深绿色的代码被标记为"payload length",格式为"varuint7";
我不确定如何识别接下来的部分,有点迷惑"payload data"是哪部分?官方文档中写的"The end of the last present section must coincide with the last byte of the module."是什么意思。
我建议查看现有的 WebAssembly 二进制解析器以帮助理解。这里是 the WebKit one.
每个部分都以特定于部分的方式解码,详见 in the binary format documents。您查看 id
和 payload_length
,然后根据部分 ID 解码相应的部分。该页面的部分编号为:
- 类型
- 导入
- 函数
- Table
- 内存
- 全球
- 导出
- 开始
- 元素
- 代码
- 数据
此外,0 是 "custom"。
转到每个部分的描述以了解如何对其进行解码。
"The end of the last present section must coincide with the last byte of the module." 表示如果你解码一个部分,并且解码的长度与有效载荷数据不匹配,那么这是一个验证错误。
我正在尝试根据 webassembly 的模块结构文档来识别 wasm 二进制模块的每个部分。我已经完成了一部分识别,如下所示:
screenshot
红色代码被标记为"magic code";
深橙色代码被标记为 "version number";
浅黄色代码被标记为第一部分的"id";
深绿色的代码被标记为"payload length",格式为"varuint7";
我不确定如何识别接下来的部分,有点迷惑"payload data"是哪部分?官方文档中写的"The end of the last present section must coincide with the last byte of the module."是什么意思。
我建议查看现有的 WebAssembly 二进制解析器以帮助理解。这里是 the WebKit one.
每个部分都以特定于部分的方式解码,详见 in the binary format documents。您查看 id
和 payload_length
,然后根据部分 ID 解码相应的部分。该页面的部分编号为:
- 类型
- 导入
- 函数
- Table
- 内存
- 全球
- 导出
- 开始
- 元素
- 代码
- 数据
此外,0 是 "custom"。
转到每个部分的描述以了解如何对其进行解码。
"The end of the last present section must coincide with the last byte of the module." 表示如果你解码一个部分,并且解码的长度与有效载荷数据不匹配,那么这是一个验证错误。