អ្នកអភិវឌ្ឍន៍ V8 បានបង្ហាញ decompiler សម្រាប់ WebAssembly

អ្នកអភិវឌ្ឍន៍ម៉ាស៊ីន V8 JavaScript បង្ហាញ ឧបករណ៍ប្រើប្រាស់ wasm-decompileដែលអនុញ្ញាតឱ្យអ្នក decompile តំណាងប្រព័ន្ធគោលពីរកម្រិតមធ្យម WebAssembly ។ ទៅជាភាសាក្លែងក្លាយដែលអាចអានបានដែលនឹកឃើញដល់ JavaScript និង C. ភាសាក្លែងបន្លំដែលបានស្នើឡើងគឺកាន់តែងាយស្រួលយល់ និងសមរម្យសម្រាប់ការញែកដោយដៃជាងការតំណាងអត្ថបទនៃ WebAssembly ក្នុងទម្រង់ “.wat” ដែលខិតជិតទៅនឹងភាសាជួបប្រជុំជាជាងភាសាកម្រិតខ្ពស់។ ក្នុង​ករណី​នេះ ការ​បង្ខូច​ទ្រង់ទ្រាយ​ឆ្លុះ​បញ្ចាំង​ពី​តំណាង Wasm ឱ្យ​បាន​ពេញលេញ​តាម​ដែល​អាច​ធ្វើ​ទៅ​បាន។

Decompiler រួមបញ្ចូល រួមបញ្ចូលនៅក្នុងកញ្ចប់ឧបករណ៍ WABTដែលផ្តល់ការបកប្រែរវាងតំណាងប្រព័ន្ធគោលពីរ និងអត្ថបទនៃ WebAssembly ក៏ដូចជាការញែក ដំណើរការ ការកែប្រែ និងការផ្ទៀងផ្ទាត់ឯកសារ wasm ។ WABT ក៏កំពុងបង្កើតឧបករណ៍ប្រើប្រាស់ផងដែរ។ wasm2cដែលអនុញ្ញាតឱ្យឯកសារ wasm ត្រូវបាន decompiled ទៅជាកូដ C ដែលសមមូល ដែលអាចត្រូវបានចងក្រងដោយ C compiler ប៉ុន្តែមិនមានភាពខុសប្លែកគ្នាច្រើននៅក្នុងលក្ខខណ្ឌនៃការអានពីតំណាងអត្ថបទនៃ "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 ទៅជាភាសាក្លែងក្លាយ

មុខងារ dot(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. បន្ថែម
(f32. បន្ថែម
(f32.mul
(f32. ផ្ទុក
(local.get 0))
(f32. ផ្ទុក
(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

បន្ថែមមតិយោបល់