تخطَّ إلى المحتوى

Binaryen - مجموعة أدوات المترجم والمُحسِّن WebAssembly

Binaryen - مجموعة أدوات المترجم والمُحسِّن WebAssembly

Binaryen هي مكتبة بنية تحتية لمترجم وأداة لـ WebAssembly، مكتوبة بـ C++. أداتها الرئيسية، wasm-opt، تحمل وحدة wasm إلى تمثيل وسيط وتشغل تمريرات التحسين والتحويل — نفس الآلية التي تستخدمها سلاسل الأدوات مثل Emscripten لتقليل واستقرار wasm. بالنسبة لمهندسي الهندسة العكسية، مفكك شيفرة Binaryen (wasm-dis) وتمريرات التحليل/التحويل الخاصة به (بما في ذلك التبسيطات المساعدة في إلغاء الإخفاء) تجعلها ملحق مفيد لـ WABT.

التثبيت

النظام الأساسيالأمر
macOS (Homebrew)brew install binaryen
Debian/Ubuntusudo apt install binaryen
Arch Linuxsudo pacman -S binaryen
npmnpm install -g binaryen (ربط JS)
من المصدربناء مع CMake من مستودع WebAssembly/binaryen
التحققwasm-opt --version

الأدوات الأساسية

الأداةيفعل
wasm-optتحميل وتحسين/تحويل وإعادة إرسال وحدة
wasm-disفك التجميع .wasm → نص
wasm-asتجميع النص → .wasm
wasm-metadceحذف الكود الميت عبر الوحدة + JS
wasm-ctor-evalتقييم المنشئات في وقت البناء
wasm-reduceتقليل الوحدة مع الحفاظ على السلوك (تكرار الخلل)
wasm-shellتشغيل قذيفة اختبار المواصفات

تحسين الوحدة

# تحسين للحجم والسرعة
wasm-opt -O3 module.wasm -o module.opt.wasm

# تحسين عدواني للحجم
wasm-opt -Oz module.wasm -o module.small.wasm
العلمالتأثير
-O / -O1..-O4تحسين متزايد للسرعة
-Osتحسين للحجم
-Ozتحسين عدواني للحجم
--enable-FEATUREتفعيل اقتراح wasm (simd, threads, …)
-o FILEملف الإخراج

تشغيل التمريرات الفردية

تعرض wasm-opt العديد من التمريرات المسماة التي يمكنك تشغيلها بشكل انتقائي — مفيد لـ HR (تبسيط الكود المخفي) وكذلك الإنشاءات.

# قائمة جميع التمريرات المتاحة
wasm-opt --help | grep -A2 "passes:"

# تشغيل تمريرات محددة (على سبيل المثال تبسيط + إزالة غير المستخدم)
wasm-opt module.wasm --precompute --simplify-locals \
  --remove-unused-names --vacuum -o clean.wasm
التمرير (أمثلة)الغرض
--precomputeثني التعبيرات الثابتة
--simplify-localsتقليل استخدام المتغيرات المحلية الزائدة
--vacuumإزالة الكود الميت بوضوح
--remove-unused-module-elementsتجريد الوظائف/العالمية غير المستخدمة
--flatten / --rereloopإعادة هيكلة تدفق التحكم

فك التجميع / التجميع

# فك التجميع إلى نموذج نص Binaryen
wasm-dis module.wasm -o module.wat

# تجميع مرة أخرى
wasm-as module.wat -o module.wasm

استخدام HR: تبسيط ثم قراءة

خدعة عملية للهندسة العكسية هي تشغيل تمريرات التبسيط من Binaryen لتنظيف ضوضاء المترجم/محجوب ثم قراءة النتيجة.

# تبسيط وحدة معقدة ثم فك تجميع مع WABT
wasm-opt target.wasm --precompute --simplify-locals --vacuum -o simpler.wasm
wasm-decompile simpler.wasm -o simpler.dcmp

تقليل نسخة (wasm-reduce)

# تقليل الوحدة بينما لا تزال السيناريو تبلغ عن السلوك المهم
wasm-reduce big.wasm --command "node check.js" -o small.wasm

رائع لعزل الحد الأدنى من wasm الذي يؤدي إلى خلل أو سلوك معين.

Binaryen مقابل الأدوات ذات الصلة

الأداةالتركيز
Binaryenتحسين/تحويل/تحليل wasm (درجة المترجم)
WABTتحويل/فحص/تحقق/فك تجميع
diswasmمفكك شيفرة رمز زائف
wasm-toolsمعالجة Rust منخفضة المستوى

بالنسبة لـ HR: استخدم Binaryen لتبسيط، WABT/diswasm للقراءة، و wasm-tools للتحقق/الطفرة.

الموارد