如何使这个 Wasm 函数在其母语中易于阅读?

我有以下 Wasm 函数,我想了解它是某种 webgl 片段着色器:


func $frag_shader (param i32)

(local i32 i32 i32 i32 i32)

  global.get 0

  i32.const 32

  i32.sub

  local.tee 1

  global.set 0

  local.get 1

  i32.const 16

  i32.add

  i32.const 1049267

  i32.const 85

  call 23

  local.get 1

  i32.load offset=16 align=4

  local.set 2

  block

    block

      block

        block

          local.get 1

          i32.load offset=20 align=4

          local.tee 3

          local.get 1

          i32.load offset=24 align=4

          local.tee 4

          i32.ne

          br_if 0

          local.get 2

          local.set 5

          local.get 3

          local.set 4

          br 1

        end

        local.get 3

        local.get 4

        i32.lt_u

        br_if 1

        block

          local.get 4

          br_if 0

          i32.const 0

          local.set 4

          i32.const 1

          local.set 5

          local.get 3

          i32.eqz

          br_if 1

          local.get 2

          call 61

          br 1

        end

        local.get 2

        local.get 3

        i32.const 1

        local.get 4

        call 52

        local.tee 5

        i32.eqz

        br_if 2

      end

      local.get 1

      i32.const 8

      i32.add

      local.get 5

      local.get 4

      call 49

      local.get 0

      local.get 1

      i64.load offset=8 align=8

      i64.store offset=0 align=4

      local.get 1

      i32.const 32

      i32.add

      global.set 0

      return

    end

    i32.const 1049136

    call 25

    unreachable

  end

  local.get 4

  i32.const 1

  i32.const 0

  i32.load offset=1050388 align=4

  local.tee 1

  i32.const 1

  local.get 1

  select

  call_indirect 4

  unreachable

end

我熟悉javascript,但这对我来说是无法理解的。找出如何将其转换为更“友好”的 javascript 的最佳选择是什么?


有没有工具可以帮助转换为更好的格式?或者有没有更容易理解的方法?


喵喔喔
浏览 160回答 2
2回答

慕盖茨4494581

您似乎在要求反编译器,这是一种将编译器生成的低级代码转换回源级代码的工具。反编译器通常用于逆向工程。我不知道目前有任何用于 Wasm 的反编译器。此外,您首先需要知道或猜测最初开发此代码的源语言。

慕斯709654

所以你所拥有的是类似于 WAT 的东西,它是 WASM 文本格式。但是它不是有效的 WAT,所以我不确定你能用它做什么。如果它是有效的 WAT,您可以使用WebAssembly Binary Toolkit中的 wat2wasm 将 WAT 转换为二进制 WASM,然后使用 wasm2c 将其转换为半可读的 C。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript