Ua hōʻike nā mea hoʻomohala V8 i kahi decompiler no WebAssembly

Nā mea hoʻomohala o ka mīkini JavaScript V8 hōʻike ʻia pono wasm-decompile, hiki iā ʻoe ke hoʻokaʻawale i ka hōʻike binary waena Pūnaewele i loko o ka ʻōlelo pseudo hiki ke heluhelu ʻia e like me JavaScript a me C. ʻOi aku ka maʻalahi o ka ʻōlelo pseudo i manaʻo ʻia a ʻoi aku ka maikaʻi no ka parsing manual ma mua o ka hōʻike kikokikona o WebAssembly ma ke ʻano ".wat", kahi kokoke i ka ʻōlelo hui ma mua o nā ʻōlelo kiʻekiʻe. I kēia hihia, hōʻike ka decompilation i ka hōʻike Wasm e like me ka hiki.

Mea hoʻopili komo komo i loko o ka mea hana WABT, e hāʻawi ana i ka unuhi ma waena o nā hōʻike binary a me nā kikokikona o WebAssembly, a me ka parsing, ka hana ʻana, ka hoʻololi a me ka hōʻoia ʻana i nā faila wasm. Ke hoʻomohala nei ʻo WABT i kahi pono wasm2c, ka mea e hiki ai ke hoʻokaʻawale ʻia nā faila wasm i loko o ke code C like i hiki ke hoʻopili ʻia e kahi mea hoʻopili C, akā ʻaʻole ʻokoʻa loa i ka heluhelu ʻana mai ke ʻano kikokikona o "wat".

No ka laʻana, ka hana C kumu i hōʻuluʻulu ʻia ma wasm

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

kiko lana (const vec3 *a, const vec3 *b) {
hoʻihoʻi a->x * b->x +
a->y * b->y +
a->z * b->z;
}

e hoʻokaʻawale ʻia e ka wasm-decompile i loko o kahi ʻōlelo pseudo

kiko kiko (a:{ a:float, b:float, c:float},
b:{ a:float, b:float, c:float }):float {
hoʻi a.a * b.a + a.b * b.b + a.c * b.c
}

ʻoiai ka hoʻololi ʻana i ke ʻano kikokikona ".wat" e like me kēia

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

Pākuʻi i ka manaʻo hoʻopuka