【问题标题】:Is it possible to decompile Web Assembly (wasm) files to a specific programming language?是否可以将 Web Assembly (wasm) 文件反编译为特定的编程语言?
【发布时间】:2019-10-25 18:18:57
【问题描述】:

目前大多数编程语言,都可以编译为 WebAssembly(官方或通过外部包)。

所以我想知道...是否可以反编译 Web 程序集文件?所以我们可以用一种语言编写的代码可以编译成.wasm,然后用另一种语言反编译它?然后,从.wasm 文件中生成.java.js.py.go 等。有可能吗?

【问题讨论】:

    标签: webassembly


    【解决方案1】:

    有一个从 webassembly 二进制文件到 C 的转换器。

    https://github.com/WebAssembly/wabt/tree/master/wasm2c

    正如在另一个答案中所写的那样,它不会看起来像原始源文件的任何内容,但至少它应该能够将逻辑转移到 C 中,然后通过将其包装到库中也可以与其他语言一起使用。

    【讨论】:

    • 从生成的代码逆向工程应用程序有多难?
    【解决方案2】:

    目前我知道没有 WebAssembly 反汇编程序。这样做的一个重大障碍是在编译过程中丢弃了大量信息。您感兴趣的语言(JavaScript、Java、Python、Go)具有字符串、类、结构等结构...... WebAssembly 级别不存在这些结构。此外,生成的 WebAssembly 模块中(通常)不存在函数和变量名称。

    虽然您可以创建一个工具,将 WebAssembly 模块“翻译”成 Java、Python、Go 或 JavaScript 程序,在执行时它表现出正确的行为,但它看起来与编译为 WebAssembly 的原始程序完全不同。

    【讨论】:

    • 感谢@ColinE,回答了我的问题。我的用例是只有一个代码,并在任何地方使用它,而不关心生成的代码的样子。我会尝试对此进行一些调查。
    • @KadoBOT 这正是虚拟机的概念。其中一些可以嵌入到其他程序中。其中一些也执行 WebAssembly。
    • 这是不正确的。 go 没有类,它生成的二进制文件也没有反编译器。
    【解决方案3】:

    @KadoBOT 你可以使用 wasm-decompile.exe 来反编译你的 wasm 文件 https://github.com/WebAssembly/wabt

    【讨论】:

      猜你喜欢
      • 2011-07-14
      • 1970-01-01
      • 2017-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多