Die Entwickler von V8 haben einen Decompiler für WebAssembly vorgestellt

Die Entwickler der JavaScript-Engine V8 haben vorgestellt ein Tool wasm-decompile, das die Dekompilierung der Zwischenbinarrepräsentation WebAssembly 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 ist Teil des Tools WABT , das die Übersetzung zwischen binären und textuellen Repräsentationen von WebAssembly sowie das Parsen, Verarbeiten, Modifizieren und Überprüfen von wasm-Dateien ermöglicht. Im Rahmen von WABT wird auch das Toolwasm2c , das es ermöglicht, wasm-Dateien in äquivalenten C-Code zu dekompilieren, der mit einem C-Compiler kompiliert werden kann, jedoch in Bezug auf die Lesbarkeit nur wenig von der Textdarstellung „wat“ unterscheidet, weiterentwickelt.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

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster