V8 Difelopa gbekalẹ a decompiler fun WebAssembly

Awọn Difelopa ti V8 JavaScript engine gbekalẹ ohun elo wasm-pipako, gbigba ọ laaye lati ṣajọ aṣoju alakomeji agbedemeji Apejọ Ayelujara sinu ede pseudo ti o le ka ti JavaScript ati C. Ede pseudo ti a dabaa jẹ rọrun pupọ lati ni oye ati pe o dara julọ fun sisọ afọwọṣe ju aṣoju ọrọ ti WebAssembly ni ọna kika “.wat”, eyiti o sunmọ ede apejọ ju awọn ede giga lọ. Ni idi eyi, ifasilẹ naa ṣe afihan aṣoju Wasm ni kikun bi o ti ṣee.

Olupilẹṣẹ to wa to wa ninu ohun elo irinṣẹ WABT, eyiti o pese itumọ laarin alakomeji ati awọn aṣoju ọrọ ti WebAssembly, bakanna bi sisọ, sisẹ, iyipada ati ijẹrisi awọn faili wasm. WABT tun n ṣe idagbasoke ohun elo kan wasm2c, eyiti ngbanilaaye awọn faili wasm lati wa ni pipọ si koodu C deede ti o le ṣe akopọ nipasẹ olupilẹṣẹ C, ṣugbọn ko yatọ pupọ ni awọn ofin kika kika lati aṣoju ọrọ ti “wat”.

Fun apẹẹrẹ, iṣẹ atilẹba C ti a ṣajọpọ ni wasm

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

aami leefofo loju omi (const vec3 *a, const vec3 *b) {
pada a->x * b->x +
a->y * b->y +
a->z * b->z;
}

yoo jẹ pipọ nipasẹ ohun elo wasm-decompile sinu ede irokuro

aami iṣẹ (a: {a: leefofo, b: leefofo, c: leefofo},
b:{a:fofo, b: leefofo, c: leefofo}): leefofo {
pada aa * ba + ab * bb + ac * bc
}

nigba ti iyipada si ọna kika ọrọ ".wat" yoo dabi eyi

(func $dot (iru 0) (param i32 i32) (esi f32)
(f32.afikun
(f32.afikun
(f32.mul
(f32.rù
(agbegbe.gba 0))
(f32.rù
(local.gba 1)))
(f32.mul
(f32.load offset=4
(agbegbe.gba 0))
(f32.load offset=4
(local.gba 1))))
(f32.mul
(f32.load offset=8
(agbegbe.gba 0))
(f32.load offset=8
(local.gba 1))))))

orisun: opennet.ru

Fi ọrọìwòye kun