V8 arendajad esitlesid WebAssembly dekompilaatorit

V8 JavaScripti mootori arendajad esitatakse kasulikkust wasm-dekompileerida, mis võimaldab vahepealset binaarset esitust dekompileerida WebAssembly loetavasse pseudokeelde, mis meenutab JavaScripti ja C. Kavandatav pseudokeel on palju lihtsamini mõistetav ja sobivam käsitsi sõelumiseks kui WebAssembly tekstiline esitus vormingus “.wat”, mis on lähemal assemblerkeelele kui kõrgetasemelistele keeltele. Sel juhul kajastab dekompileerimine Wasmi esitust võimalikult täielikult.

Dekompilaator sisse lülitatud sisaldub tööriistakomplektis WABT, mis pakub WebAssembly binaar- ja tekstiesitluse vahelist tõlget, samuti wasm-failide sõelumist, töötlemist, muutmist ja kontrollimist. WABT arendab ka utiliiti wasm2c, mis võimaldab wasm-faile dekompileerida samaväärseks C-koodiks, mida saab kompileerida C-kompilaatoriga, kuid see ei erine loetavuse poolest palju "wat" tekstilisest esitusest.

Näiteks algne C-funktsioon, mis on kompileeritud wasm-is

typedef struct { float x, y, z; } vec3;

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

dekompileeritakse utiliit wasm-decompile pseudokeeleks

funktsioon dot(a:{ a: float, b: float, c: float },
b:{ a:float, b: float, c: float }): float {
tagasta aa * ba + ab * bb + ac * bc
}

samas kui teisendamine tekstivormingusse ".wat" näeks välja selline

(func $dot (tüüp 0) (param i32 i32) (tulemus f32)
(f32.add
(f32.add
(f32.mul
(f32.load
(local.get 0))
(f32.load
(kohalik.hanki 1)))
(f32.mul
(f32.koormuse nihe=4
(local.get 0))
(f32.koormuse nihe=4
(kohalik.hanki 1))))
(f32.mul
(f32.koormuse nihe=8
(local.get 0))
(f32.koormuse nihe=8
(kohalik.hanki 1))))))

Allikas: opennet.ru

Lisa kommentaar