混淆webassembly的二进制代码结构

时间:2017-06-22 15:18:56

标签: webassembly

我试图根据webassembly的模块结构doc识别ism二进制模块的每个部分。我已经完成了以下显示的部分识别:

screenshot

红色代码标记为"魔术代码&#34 ;;

深橙色代码标记为"版本号&#34 ;;

淡黄色的代码被标记为" id"第一部分;

深绿色代码标记为"有效负载长度"在" varuint7"格式;

我不确定如何识别下面的部分,有点混淆哪个部分是"有效载荷数据"? &#34的含义是什么;最后一个当前部分的结尾必须与模块的最后一个字节一致。"在官方文件中写道。

1 个答案:

答案 0 :(得分:1)

我建议查看现有的WebAssembly二进制解析器以帮助理解。这是the WebKit one

每个部分都以特定部分的方式解码为详细in the binary format documents。您查看idpayload_length,然后根据部分ID解码相应的部分。从该页面开始,部分编号为:

  1. 类型
  2. 导入
  3. 功能
  4. 内存
  5. 全局
  6. 导出
  7. 开始
  8. 元素
  9. 数据
  10. 此外,0是" custom"。

    转到每个部分的说明,了解如何解码它们。

    "最后一个当前部分的结尾必须与模块的最后一个字节重合。"意味着如果您解码一个部分,并且解码的长度与有效载荷数据不匹配,那么它就是验证错误。