V8 tərtibatçıları WebAssembly üçün dekompilyator təqdim etdilər

V8 JavaScript mühərrikinin tərtibatçıları təqdim etdi kommunal wasm-decompile, bu, aralıq ikili təmsili dekompilyasiya etməyə imkan verir WebAssembly JavaScript və C-ni xatırladan oxunaqlı psevdo-dildə. Təklif olunan psevdodil başa düşmək üçün çox asandır və əl ilə təhlil üçün WebAssembly-in “.wat” formatında mətn təqdimatından daha uyğundur, bu da yüksək səviyyəli dillərdən daha çox assembler dilinə yaxındır. Bu halda, dekompilyasiya Wasm təmsilini mümkün qədər tam əks etdirir.

Dekompilyator daxildir alətlər dəstinə daxildir WABTWebAssembly-nin binar və mətn təmsilləri arasında tərcüməni, həmçinin wasm fayllarının təhlilini, işlənməsini, dəyişdirilməsini və yoxlanmasını təmin edən . WABT həmçinin kommunal proqram hazırlayır wasm2c, bu, wasm fayllarını C tərtibçisi tərəfindən tərtib edilə bilən ekvivalent C koduna dekompilyasiya etməyə imkan verir, lakin oxunaqlılıq baxımından "wat"ın mətn təmsilindən çox da fərqlənmir.

Məsələn, wasm-də tərtib edilmiş orijinal C funksiyası

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

float nöqtə (const vec3 *a, const vec3 *b) {
a->x * b->x + qaytarın
a->y * b->y +
a->z * b->z;
}

wasm-decompile yardım proqramı tərəfindən psevdo-dilə dekompilyasiya ediləcək

funksiya nöqtəsi(a:{ a:float, b:float, c:float},
b:{ a:float, b:float, c:float}):float {
aa * ba + ab * bb + ac * bc qaytarın
}

mətn formatına çevrilmə isə ".wat" belə görünür

(func $nöqtə (tip 0) (param i32 i32) (nəticə f32)
(f32.əlavə
(f32.əlavə
(f32.mul
(f32.load
(local.get 0))
(f32.load
(local.get 1)))
(f32.mul
(f32.load ofset=4
(local.get 0))
(f32.load ofset=4
(local.get 1))
(f32.mul
(f32.load ofset=8
(local.get 0))
(f32.load ofset=8
(local.get 1))))))

Mənbə: opennet.ru

Добавить комментарий