V8 開発者は WebAssembly 用の逆コンパイラーを発表しました

V8 JavaScript エンジンの開発者 提出済み ユーティリティ wasm-デコンパイル、中間バイナリ表現を逆コンパイルできるようにします。 WebAssembly JavaScript や C を思わせる可読な疑似言語に変換します。 提案された擬似言語は、高級言語よりもアセンブリ言語に近い「.wat」形式の WebAssembly のテキスト表現よりもはるかに理解しやすく、手動解析に適しています。 この場合、逆コンパイルでは Wasm 表現が可能な限り完全に反映されます。

逆コンパイラ 含まれています ツールキットに含まれている ワト、WebAssembly のバイナリ表現とテキスト表現の間の変換、および wasm ファイルの解析、処理、変更、検証を提供します。 WABTはユーティリティも開発中 wasm2cこれにより、wasm ファイルを、C コンパイラでコンパイルできる同等の C コードに逆コンパイルできますが、可読性の点では「wat」のテキスト表現とそれほど変わりません。

たとえば、wasm でコンパイルされた元の C 関数

typedef struct { float x、y、z; vec3;

float dot(const vec3 *a, const vec3 *b) {
a->x * b->x + を返す
a->y * b->y +
a->z * b->z;
}

wasm-decompile ユーティリティによって擬似言語に逆コンパイルされます

関数 dot(a:{ a:float, b:float, c:float },
b:{ a:float, b:float, c:float }):float {
aa * ba + ab * bb + ac * bc を返します
}

一方、テキスト形式「.wat」への変換は次のようになります。

(func $dot (type 0) (param i32 i32) (result f32)
(f32.add
(f32.add
(f32.mul
(f32.load
(ローカル.get 0))
(f32.load
(local.get 1)))
(f32.mul
(f32.ロードオフセット=4
(ローカル.get 0))
(f32.ロードオフセット=4
(local.get 1))))
(f32.mul
(f32.ロードオフセット=8
(ローカル.get 0))
(f32.ロードオフセット=8
(local.get 1))))))

出所: オープンネット.ru

コメントを追加します