【问题标题】:Confusing on webassembly's binary code structure对 webassembly 的二进制代码结构感到困惑
【发布时间】:2017-06-22 15:18:55
【问题描述】:

我正在尝试根据 webassembly 的模块结构文档识别 wasm 二进制模块的每个部分。我已经完成了部分认可,如下所示:

screenshot

红色的代码被标记为“魔法代码”;

深橙色的代码被标记为“版本号”;

浅黄色的代码被标记为第一部分的“id”;

深绿色的代码被标记为“varuint7”格式的“payload length”;

我不确定如何识别接下来的部分,对哪个部分是“有效载荷数据”有点困惑? “最后一个当前部分的结尾必须与模块的最后一个字节重合”是什么意思。官方文档中写的。

【问题讨论】:

    标签: webassembly


    【解决方案1】:

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

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

    1. 类型
    2. 导入
    3. 功能
    4. 内存
    5. 全球
    6. 导出
    7. 开始
    8. 元素
    9. 代码
    10. 数据

    另外,0 是“自定义”。

    转到每个部分的描述以了解如何解码它们。

    “最后一个当前部分的结尾必须与模块的最后一个字节重合。”意思是如果你解码一个section,并且解码的长度和payload数据不匹配,那么就是验证错误。

    【讨论】:

    • 是否可以从 javascriptcore 中提取所有这些解析逻辑并将其构建成一个专注于分析 wasm 模块的独立程序?
    • 是的。您必须使用它创建的ModuleInformation,并根据当前的CRTP 方法实现您自己的FunctionParser(它已经使用了两次:一次用于正常解析,一次用于无法访问)。当然,确定许可证也取决于您。
    • 谢谢!实际上这对我来说真的很难实现,但值得做! ;)
    • 我已经从 webkit 官方 repo 的 master 分支构建了 jsc,但是当我尝试从命令行执行它时,我收到了这个错误消息“dyld:Symbol not found:__ZN3JSC19JSWebAssemblyMemory6s_infoE”。让我再试一次。
    • 另外,我收到此错误消息:'错误:没有名称或路径的 sdk:.../jsc-cli/macosx.internal',在 google 上找不到帮助。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    • 2023-03-26
    • 2016-11-22
    • 2014-08-31
    • 2015-07-12
    相关资源
    最近更新 更多