将 WebAssembly 二进制文件映射到它的源代码

Mapping WebAssembly binary to its source code

编译带有 -g 标志的 C/C++ 代码会在生成的二进制文件中产生调试信息。特别是,有一个源代码到二进制代码的映射:

add:     file format elf64-x86-64


Disassembly of section .text:

0000000000000000 <add>:
int add(int a, int b) {
   0:   55                      push   %rbp
   1:   48 89 e5                mov    %rsp,%rbp
   4:   89 7d fc                mov    %edi,-0x4(%rbp)
   7:   89 75 f8                mov    %esi,-0x8(%rbp)
        return a + b;
   a:   8b 45 fc                mov    -0x4(%rbp),%eax
   d:   03 45 f8                add    -0x8(%rbp),%eax
  10:   5d                      pop    %rbp
  11:   c3                      retq

用clang或emcc编译WebAssembly有类似的东西吗? 我用这些尝试了 -g 标志,但它没有相同的行为。 最后,我想要一个 .wat 代码到 C 代码的映射。

llvm-objdump -S 的工作方式应该与它对本机对象文件的工作方式相同。

如果您正在寻找缺少调试信息的代码的良好显示,您可能还想看看 wasm-decompile,它是 wabt 项目的一部分。它能够比 normal/native 反编译器更好地使内容可读。