Таҳиягарони V8 як декомпиляторро барои WebAssembly муаррифӣ карданд

Таҳиягарони муҳаррики JavaScript V8 пешниҳод фоиданок wasm-decompile, ки ба шумо имкон медиҳад, ки намояндагии мобайнии бинариро декомпиляция кунед WebAssembly ба забони псевдо-забони хондашаванда, ки ба JavaScript ва C. Забони псевдо-забони пешниҳодшуда нисбат ба муаррифии матнии WebAssembly дар формати “.wat” фаҳмидан осонтар аст ва барои таҳлили дастӣ мувофиқтар аст, ки нисбат ба забонҳои сатҳи баланд ба забони ассемблер наздиктар аст. Дар ин ҳолат, декомпиляция намояндагии Wasm-ро то ҳадди имкон пурра инъикос мекунад.

Декомпилятор фурӯзон ба маҷмӯаи асбобҳо дохил карда шудаанд ВАБТ, ки тарҷумаи байни намоишҳои дуӣ ва матнии WebAssembly, инчунин таҳлил, коркард, тағир додан ва тафтиши файлҳои wasm-ро таъмин мекунад. WABT инчунин як хидматро таҳия мекунад wasm2c, ки ба файлҳои wasm имкон медиҳад, ки ба рамзи муодили C, ки онро компилятори C тартиб дода метавонад, ҷудо карда шавад, аммо аз ҷиҳати хониш аз муаррифии матнии "ват" чандон фарқ надорад.

Масалан, функсияи аслии C дар wasm тартиб дода шудааст

typedef struct { шинокунандаи x, y, z; } vec3;

нуқтаи шинокунанда (const vec3 *a, const vec3 *b) {
бозгашт a->x * b->x +
а->й * б->й +
а->з * б->з;
}

аз ҷониби утилитаи wasm-decompile ба псевдозабони декомпиляция карда мешавад

функсия нуқта(a:{ a: шино, б: шино, в: шино },
б:{ а: шино кардан, б: шино кардан, в: шино кардан }): шино кардан {
баргаштан аа * ба + аб * bb + ac * аз милод
}

дар ҳоле ки табдил ба формати матнии ".wat" чунин хоҳад буд

(func $dot (навъи 0) (парам i32 i32) (натиҷаи f32)
(f32.add
(f32.add
(f32.mul
(f32.load
(local.get 0))
(f32.load
(local.get 1)))
(f32.mul
(f32. ҷуброни бор = 4
(local.get 0))
(f32. ҷуброни бор = 4
(local.get 1))))
(f32.mul
(f32. ҷуброни бор = 8
(local.get 0))
(f32. ҷуброни бор = 8
(local.get 1))))))

Манбаъ: opennet.ru

Илова Эзоҳ