V8 forritarar kynntu decompiler fyrir WebAssembly

Hönnuðir V8 JavaScript vélarinnar fram gagnsemi wasm-decompile, sem gerir þér kleift að taka niður millitvíundir framsetningu WebAssembly yfir á læsilegt gervitungumál sem minnir á JavaScript og C. Fyrirhugað gervitungumál er mun auðveldara að skilja og hentugra fyrir handvirka þáttun en textaframsetning WebAssembly á „.wat“ sniði, sem er nær samsetningartungumáli en háþróuðum tungumálum. Í þessu tilviki endurspeglar niðurfellingin Wasm framsetninguna eins fullkomlega og mögulegt er.

Decompiler innifalinn innifalinn í verkfærakistunni WABT, sem veitir þýðingu á milli tvíundar- og textaframsetninga á WebAssembly, svo og þáttun, vinnslu, breytingu og sannprófun á wasm skrám. WABT er einnig að þróa tól wasm2c, sem gerir kleift að taka wasm skrár niður í jafngildan C kóða sem hægt er að setja saman af C þýðanda, en er ekki mikið frábrugðið hvað varðar læsileika en textaframsetning "wat".

Til dæmis, upprunalega C fallið sett saman í wasm

typedef struct { fljóta x, y, z; } vec3;

fljóta punktur(const vec3 *a, const vec3 *b) {
skila a->x * b->x +
a->y * b->y +
a->z * b->z;
}

verður tekið niður af wasm-decompile tólinu í gervitungumál

fall punktur(a:{ a:float, b:float, c:float },
b:{ a:float, b:float, c:float }):float {
skila aa * ba + ab * bb + ac * bc
}

á meðan umbreytingin í textasniðið ".wat" myndi líta svona út

(func $ punktur (tegund 0) (param i32 i32) (niðurstaða f32)
(f32.add
(f32.add
(f32.mul
(f32.hlaða
(local.get 0))
(f32.hlaða
(local.get 1)))
(f32.mul
(f32.álagshlutfall=4
(local.get 0))
(f32.álagshlutfall=4
(local.get 1))))
(f32.mul
(f32.álagshlutfall=8
(local.get 0))
(f32.álagshlutfall=8
(local.get 1))))))

Heimild: opennet.ru

Bæta við athugasemd