L-iżviluppaturi V8 ippreżentaw decompiler għal WebAssembly

Iżviluppaturi tal-magna V8 JavaScript ippreżentata utilità wasm-decompile, li jippermettilek li tiddikompila r-rappreżentazzjoni binarja intermedja Assemblaġġ tal-Web fi psewdo-lingwa li tista’ tinqara li tfakkar f’JavaScript u C. Il-psewdo-lingwa proposta hija ħafna aktar faċli biex tinftiehem u aktar adattata għall-parsing manwali mir-rappreżentazzjoni testwali ta 'WebAssembly fil-format ".wat", li hija eqreb għal-lingwa tal-assemblaġġ milli għal lingwi ta' livell għoli. F'dan il-każ, id-dekompilazzjoni tirrifletti r-rappreżentazzjoni tal-Wasm bl-aktar mod sħiħ possibbli.

Decompiler inklużi inklużi fis-sett ta’ għodod WABT, li jipprovdi traduzzjoni bejn rappreżentazzjonijiet binarji u ta' test ta' WebAssembly, kif ukoll parsing, ipproċessar, modifika u verifika ta' fajls wasm. WABT qed tiżviluppa wkoll utilità wasm2c, li jippermetti li l-fajls wasm jiġu dekompilati f'kodiċi C ekwivalenti li jista 'jiġi kkompilat minn kompilatur C, iżda mhux differenti ħafna f'termini ta' leġġibbiltà mir-rappreżentazzjoni testwali ta ' "wat".

Pereżempju, il-funzjoni C oriġinali miġbura f'wasm

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

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

se jiġi dekompilat mill-utilità wasm-decompile fi psewdo-lingwa

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

filwaqt li l-konverżjoni għall-format tat-test ".wat" tkun tidher bħal din

(func $dot (tip 0) (param i32 i32) (riżultat f32)
(f32.add
(f32.add
(f32.mul
(f32.tagħbija
(local.get 0))
(f32.tagħbija
(local.get 1)))
(f32.mul
(f32.offset tat-tagħbija=4
(local.get 0))
(f32.offset tat-tagħbija=4
(local.get 1))))
(f32.mul
(f32.offset tat-tagħbija=8
(local.get 0))
(f32.offset tat-tagħbija=8
(local.get 1))))))

Sors: opennet.ru

Żid kumment