V8 සංවර්ධකයින් WebAssembly සඳහා decompiler ඉදිරිපත් කරන ලදී

V8 JavaScript එන්ජිමේ සංවර්ධකයින් ඉදිරිපත් කරන ලදී උපයෝගීතාව wasm-decompile, අතරමැදි ද්විමය නිරූපණය විසංයෝජනය කිරීමට ඔබට ඉඩ සලසයි වෙබ් එකලස් කිරීම ජාවාස්ක්‍රිප්ට් සහ සී සිහිපත් කරන කියවිය හැකි ව්‍යාජ භාෂාවකට. ඉහළ මට්ටමේ භාෂාවලට වඩා එකලස් කිරීමේ භාෂාවට සමීප “.wat” ආකෘතියේ WebAssembly හි පාඨමය නිරූපණයට වඩා යෝජිත ව්‍යාජ භාෂාව තේරුම් ගැනීමට පහසු වන අතර අතින් විග්‍රහ කිරීම සඳහා වඩාත් සුදුසු වේ. මෙම අවස්ථාවෙහිදී, විසංයෝජනය හැකිතාක් දුරට Wasm නිරූපණය පිළිබිඹු කරයි.

විසංයෝජනය ඇතුළත් මෙවලම් කට්ටලයට ඇතුළත් කර ඇත WABT, එය WebAssembly හි ද්විමය සහ පෙළ නිරූපණයන් අතර පරිවර්තනය මෙන්ම, Wasm ගොනු විග්‍රහ කිරීම, සැකසීම, වෙනස් කිරීම සහ සත්‍යාපනය කිරීම සපයයි. WABT ද උපයෝගිතා සංවර්ධනය කරමින් සිටී wasm2c, එය C සම්පාදකයක් මඟින් සම්පාදනය කළ හැකි සමාන C කේතයක් බවට wam ගොනු විසංයෝජනය කිරීමට ඉඩ සලසයි, නමුත් "wat" හි පාඨමය නිරූපණයෙන් කියවීමේ හැකියාව අනුව බොහෝ වෙනස් නොවේ.

උදාහරණයක් ලෙස, මුල් C ශ්‍රිතය wasm හි සම්පාදනය කර ඇත

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

පාවෙන තිත (const vec3 *a, const vec3 *b) {
a->x * b->x + ආපසු දෙන්න
a->y * b->y +
a->z * b->z;
}

Wasm-decompile උපයෝගීතාව මගින් ව්‍යාජ භාෂාවක් බවට විසංයෝජනය කරනු ලැබේ

ශ්‍රිත තිත (a:{ a:float, b:float, c:float },
b:{ a:float, b:float, c:float }):float {
ආපසු aa * ba + ab * bb + ac * bc
}

".wat" පෙළ ආකෘතියට පරිවර්තනය මේ ආකාරයෙන් පෙනෙනු ඇත

(func $dot (0 වර්ගය) (param i32 i32) (ප්‍රතිඵල 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))))))

මූලාශ්රය: opennet.ru

අදහස් එක් කරන්න