Die Entwickler der JavaScript-Engine V8 ein Tool , das die Dekompilierung der Zwischenbinarrepräsentation in eine lesbare Zwischensprache ermöglicht, die JavaScript und C ähnelt. Die vorgeschlagene Zwischensprache ist erheblich einfacher zu verstehen und eignet sich besser für manuelles Parsing als die Textdarstellung von WebAssembly im Format „.wat“, die näher an Assembler als an Hochsprachen ist. Bei der Dekompilierung wird nach Möglichkeit die Wasm-Darstellung vollständig widergespiegelt.
Der Decompiler WABT wasm2c Beispielsweise hat die in wasm kompilierte C-Funktion
typedef struct { float x, y, z; } vec3;
float dot(const vec3 *a, const vec3 *b) {
return a->x * b->x +
a->y * b->y +
a->z * b->z;
a->z * b->z;
}
wird von der wasm-decompile Utility in eine pseudocode Sprache dekodiert
function dot(a:{ a:float, b:float, c:float },
b:{ a:float, b:float, c:float }):float {
return a.a * b.a + a.b * b.b + a.c * b.c
}
während die Umwandlung in das Textformat ".wat" folgendermaßen aussieht
(func $dot (type 0) (param i32 i32) (result f32)
(f32.add
(f32.add
(f32.mul
(f32.load
(local.get 0))
(f32.load
(local.get 1)))
(f32.mul
(f32.load offset=4
(local.get 0))
(f32.load offset=4
(local.get 1))))
(f32.mul
(f32.load offset=8
(local.get 0))
(f32.load offset=8
(local.get 1))))))
Quelle: opennet.ru
