WABT - مجموعة أدوات WebAssembly الثنائية
WABT (يُنطق “wabbit”) هو مرجع مجموعة أدوات WebAssembly الثنائية — مجموعة من أدوات سطر الأوامر للعمل مع wasm على مستوى منخفض. يحول بين تنسيق .wasm الثنائي وتنسيق .wat النصي القابل للقراءة من قبل الإنسان ويفكك الوحدات ويكمشها ويتحقق منها وينتج تفكيك شيفرة على غرار C ويفسر/ينفذ wasm. إنها مجموعة الأدوات الأساسية لكل من تطوير wasm والهندسة العكسية.
التثبيت
| النظام الأساسي | الأمر |
|---|
| macOS (Homebrew) | brew install wabt |
| Debian/Ubuntu | sudo apt install wabt |
| Arch Linux | sudo pacman -S wabt |
| npm | npm install -g wabt |
| من المصدر | بناء مع CMake من مستودع WebAssembly/wabt |
| التحقق | wat2wasm --version |
الأدوات الأساسية
| الأداة | تحويل / يفعل |
|---|
wat2wasm | نص .wat → ثنائي .wasm |
wasm2wat | ثنائي .wasm → نص .wat (فك التجميع) |
wasm-objdump | تفريغ الأقسام والعمليات والرموز |
wasm-decompile | إنتاج رمز زائف قابل للقراءة على غرار C |
wasm-validate | التحقق من الوحدة |
wasm-interp | تفسير/تشغيل وحدة (آلة المكدس) |
wasm2c | تحويل wasm → مصدر C |
wasm-strip | إزالة الأقسام (على سبيل المثال الأسماء) من وحدة |
نص ↔ ثنائي
# تجميع النص إلى ثنائي
wat2wasm module.wat -o module.wasm
# فك التجميع الثنائي إلى نص (نقطة بداية HR)
wasm2wat module.wasm -o module.wat
# الاحتفاظ بأسماء التصحيح / الأقسام المخصصة أثناء فك التجميع
wasm2wat --generate-names module.wasm
| الخيار | التأثير |
|---|
-o FILE | ملف الإخراج |
--generate-names | اصطناع أسماء للوظائف/المحليات غير المسماة |
--enable-FEATURE | تشغيل اقتراح wasm (على سبيل المثال --enable-threads) |
-v | مفصل |
فحص الوحدة (objdump)
# فك التجميع الكامل + تفريغ القسم
wasm-objdump -x module.wasm # الرؤوس/الأقسام
wasm-objdump -d module.wasm # فك تجميع الكود
wasm-objdump -s module.wasm # محتوى الأقسام (سادس عشر)
| العلم | الشاشات |
|---|
-h | رؤوس الأقسام |
-x | تفاصيل جميع الأقسام |
-d | أجسام الوظائف المفككة |
-s | محتوى القسم الخام |
-j SECTION | حد أدنى إلى قسم واحد |
فك التجميع (الإخراج القابل للقراءة)
# فك التجميع على غرار C — أسهل كثيراً في القراءة من WAT
wasm-decompile module.wasm -o module.dcmp
يعيد wasm-decompile بناء تدفق التحكم المنظم والمحليات المكتوبة مما يجعلها طريقة سريعة لفهم ما تفعله الوحدة أثناء الفرز.
التحقق والتشغيل
| الأمر | الغرض |
|---|
wasm-validate module.wasm | تأكيد أن الوحدة مشكلة بشكل جيد |
wasm-interp module.wasm --run-all-exports | تنفيذ الوظائف المُصدَّرة |
wasm2c module.wasm -o module.c | بث C للتجميع/التحليل |
سير عمل الهندسة العكسية
# 1) فك التجميع مع الأسماء
wasm2wat --generate-names target.wasm -o target.wat
# 2) تفريغ الواردات/الصادرات لفهم القدرات
wasm-objdump -x target.wasm | grep -E "import|export"
# 3) احصل على رمز زائف قابل للقراءة
wasm-decompile target.wasm -o target.dcmp
# 4) ابحث عن السلاسل/عناوين URL في أقسام البيانات
wasm-objdump -s target.wasm | less
أعلام الميزة (الاقتراحات)
| العلم | يفعّل |
|---|
--enable-threads | Threads/atomics |
--enable-simd | SIMD |
--enable-bulk-memory | عمليات الذاكرة الكبيرة |
--enable-reference-types | أنواع المراجع |
--enable-all | جميع الاقتراحات المدعومة |
استخدم هذه عندما تستخدم الوحدة ميزات wasm الأحدث وترفضها الأدوات الافتراضية.
WABT مقابل الأدوات ذات الصلة
| الأداة | الدور |
|---|
| WABT | تحويل/فحص/التحقق/فك تجميع wasm |
| diswasm | مفكك شيفرة رمز زائف عالي المستوى |
| wasm-tools | معالجة Rust منخفضة المستوى |
| Binaryen | مجموعة أدوات المترجم/محسّن (wasm-dis, wasm-opt) |
الموارد