قدم مطورو V8 برنامج فك التحويل البرمجي لـ WebAssembly

مطورو محرك جافا سكريبت V8 المقدمة جدوى Wasm-فك، والذي يسمح لك بتفكيك التمثيل الثنائي الوسيط WebAssembly إلى لغة زائفة قابلة للقراءة تذكرنا بـ JavaScript وC. تعد اللغة الزائفة المقترحة أسهل بكثير في الفهم وأكثر ملاءمة للتحليل اليدوي من التمثيل النصي لـ WebAssembly بتنسيق ".wat"، وهو أقرب إلى لغة التجميع منه إلى اللغات عالية المستوى. في هذه الحالة، يعكس التفكيك تمثيل Wasm على أكمل وجه ممكن.

المفكك متضمن المدرجة في مجموعة الأدوات وابت، والذي يوفر الترجمة بين التمثيلات الثنائية والنصية لـ WebAssembly، بالإضافة إلى تحليل ملفات Wasm ومعالجتها وتعديلها والتحقق منها. تقوم WABT أيضًا بتطوير أداة مساعدة com.wasm2c، والذي يسمح بتفكيك ملفات Wasm إلى كود C مكافئ يمكن تجميعه بواسطة مترجم C، ولكنه لا يختلف كثيرًا من حيث سهولة القراءة عن التمثيل النصي لـ "wat".

على سبيل المثال، تم تجميع وظيفة C الأصلية في Wasm

بنية typedef { تعويم x، y، z؛ } vec3;

النقطة العائمة (const vec3 *a، const vec3 *b) {
العودة أ->س * ب->س +
أ->ص * ب->ص +
أ->ض * ب->ض؛
}

سيتم فك ترجمتها بواسطة الأداة المساعدة Wasm-decompile إلى لغة زائفة

وظيفة نقطة (أ:{ أ: تعويم، ب: تعويم، ج: تعويم }،
ب:{ أ: تعويم، ب: تعويم، ج: تعويم }):تعويم {
العودة أأ * با + أب * ب + أس * قبل الميلاد
}

بينما سيبدو التحويل إلى تنسيق النص ".wat" بهذا الشكل

(func $dot (النوع 0) (المعلمة i32 i32) (النتيجة f32)
(f32.إضافة
(f32.إضافة
(f32.mul
(f32.load
(محلي.احصل 0))
(f32.load
(local.get 1)))
(f32.mul
(f32.إزاحة التحميل = 4
(محلي.احصل 0))
(f32.إزاحة التحميل = 4
(local.get 1))))
(f32.mul
(f32.إزاحة التحميل = 8
(محلي.احصل 0))
(f32.إزاحة التحميل = 8
(local.get 1))))))

المصدر: opennet.ru

إضافة تعليق