Pêşdebirên V8 ji bo WebAssembly decompilerek pêşkêş kirin

Pêşdebirên motora V8 JavaScript pêşkêş kirin bikêrhatî wasm-decompile, ku destûrê dide te ku hûn nûneriya binary ya navîn ji hev derxînin Tevlêbûn Tevne nav zimanek pseudo-xwendî ku JavaScript û C tîne bîra xwe. Pîsûdo-zimanê ku tê pêşniyar kirin ji temsîla nivîsê ya WebAssembly ya di formata ".wat" de, ku ji zimanên asta bilind nêziktirî zimanê civînê ye, ji bo parskirina destan pir hêsantir tê fam kirin û ji bo parskirina destan guncantir e. Di vê rewşê de, dekompilasyon bi qasî ku gengaz nûneriya Wasm nîşan dide.

Decompiler tê de di nav toolkit WABT, ku wergerandina di navbera nûneratiyên binar û nivîsê yên WebAssembly de, û hem jî parskirin, hilberandin, guherandin û verastkirina pelên wasm peyda dike. WABT di heman demê de karûbarek pêşve dike wasm2c, ku dihêle pelên wasm di koda C-ya wekhev de ku dikare ji hêla berhevkarek C ve were berhev kirin were veqetandin, lê di warê xwendinê de ji temsîla tekstî ya "wat" ne pir cûda ye.

Mînakî, fonksiyona C ya orjînal di wasm de hatî berhev kirin

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

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

dê ji hêla wasm-decompile ve were veqetandin û bibe zimanek pseudo

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

dema ku veguhertina forma nivîsê ".wat" dê bi vî rengî xuya bike

(func $dot (cure 0) (param i32 i32) (encam 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))))))

Source: opennet.ru

Add a comment