V8 ishlab chiquvchilari WebAssembly uchun dekompilyatorni taqdim etishdi

V8 JavaScript dvigatelini ishlab chiquvchilar taqdim etildi qulaylik wasm-decompile, bu sizga oraliq ikkilik tasvirni dekompilyatsiya qilish imkonini beradi WebAssembly JavaScript va C ni eslatuvchi o'qilishi mumkin bo'lgan psevdotilga. Taklif etilayotgan soxta tilni tushunish ancha oson va qo'lda tahlil qilish uchun WebAssembly ning β€œ.wat” formatidagi matnli ko'rinishiga qaraganda ancha mos keladi, bu esa yuqori darajadagi tillarga qaraganda assembler tiliga yaqinroqdir. Bunday holda, dekompilyatsiya Wasm vakilini iloji boricha to'liq aks ettiradi.

Dekompilyator yoqilgan asboblar to'plamiga kiritilgan WABT, bu WebAssembly ning ikkilik va matnli ko'rinishlari o'rtasidagi tarjimani, shuningdek, wasm fayllarini tahlil qilish, qayta ishlash, o'zgartirish va tekshirishni ta'minlaydi. WABT shuningdek, yordamchi dasturni ishlab chiqmoqda wasm2c, bu wasm fayllarini C kompilyatori tomonidan kompilyatsiya qilinishi mumkin bo'lgan ekvivalent C kodiga dekompilyatsiya qilish imkonini beradi, lekin o'qish qobiliyati jihatidan "wat" ning matnli tasviridan unchalik farq qilmaydi.

Masalan, asl C funksiyasi wasm da tuzilgan

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

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

wasm-decompile yordam dasturi tomonidan psevdo-tilga dekompilyatsiya qilinadi

nuqta funksiyasi(a:{ a:float, b:float, c:float},
b:{ a: float, b: float, c: float}): float {
qaytish aa * ba + ab * bb + ac * miloddan avvalgi
}

".wat" matn formatiga o'tkazish esa shunday ko'rinadi

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

Manba: opennet.ru

a Izoh qo'shish