توسعه دهندگان V8 یک دیکامپایلر برای WebAssembly معرفی کردند

توسعه دهندگان موتور جاوا اسکریپت V8 ارایه شده ابزار wasm-decompile، که به شما امکان می دهد نمایش دودویی میانی را از حالت کامپایل خارج کنید WebAssembly به یک شبه زبان خوانا یادآور جاوا اسکریپت و C. شبه زبان پیشنهادی به طور قابل‌توجهی آسان‌تر و برای تجزیه دستی مناسب‌تر از نمایش متنی WebAssembly در قالب «.wat» است، که به زبان اسمبلی نزدیک‌تر است تا زبان‌های سطح بالا. در این مورد، دیکامپایل نمایش Wasm را تا حد امکان به طور کامل منعکس می کند.

دیکامپایلر مشمول در جعبه ابزار گنجانده شده است WABTکه ترجمه بین نمایش های باینری و متنی WebAssembly و همچنین تجزیه، پردازش، اصلاح و تأیید فایل های wasm را فراهم می کند. WABT همچنین در حال توسعه یک ابزار مفید است wasm2c، که به فایل های wasm اجازه می دهد تا به کد C معادل که می تواند توسط یک کامپایلر C کامپایل شود، دکامپایل شوند، اما از نظر خوانایی تفاوت زیادی با نمایش متنی "وات" ندارد.

به عنوان مثال، تابع اصلی 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;
}

توسط ابزار wam-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.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

اضافه کردن نظر