V8 developer များသည် WebAssembly အတွက် decompiler တစ်ခုကို တင်ပြခဲ့သည်။

V8 JavaScript အင်ဂျင်ကို တီထွင်သူများ တင်ဆက် utility wasm-decompileအလယ်အလတ် binary ကိုယ်စားပြုမှုကို ဖျက်နိုင်စေမည့်၊ ဝဘ်တပ်ဆင်မှု JavaScript နှင့် C တို့ကို အမှတ်ရနိုင်သော pseudo-language တွင် အဆိုပြုထားသော pseudo-language သည် နားလည်ရပိုမိုလွယ်ကူပြီး manual parsing အတွက် ".wat" ဖော်မတ်ဖြင့် စာသားကိုယ်စားပြုခြင်းထက် ကွန်ပြူတာဘာသာစကားနှင့် ပိုမိုနီးစပ်သော၊ ၎င်းသည် အဆင့်မြင့်ဘာသာစကားများနှင့် ပိုမိုနီးစပ်သည့် WebAssembly ၏ စာသားကိုယ်စားပြုမှုထက် ပိုမိုသင့်လျော်ပါသည်။ ဤကိစ္စတွင်၊ ပြိုကွဲမှုသည် Wasm ကိုယ်စားပြုမှုကို ဖြစ်နိုင်သမျှ လုံးလုံးလျားလျား ထင်ဟပ်စေသည်။

Decompiler ပါဝင်ပါသည်။ toolkit တွင်ပါဝင်သည်။ WABTWebAssembly ၏ binary နှင့် text ကိုယ်စားပြုမှုများအကြား ဘာသာပြန်ဆိုမှုများအပြင် ခွဲခြမ်းစိတ်ဖြာခြင်း၊ လုပ်ဆောင်ခြင်း၊ ပြုပြင်ခြင်းနှင့် wasm ဖိုင်များကို စစ်ဆေးခြင်းတို့ကို ပံ့ပိုးပေးပါသည်။ WABT သည် အသုံးဝင်မှုတစ်ခုကိုလည်း ဖော်ဆောင်လျက်ရှိသည်။ wasm2cwasm ဖိုင်များကို C compiler ဖြင့် စုစည်းနိုင်သော ညီမျှသော C ကုဒ်အဖြစ် ခွဲထုတ်နိုင်စေသော်လည်း "wat" ၏ စာသားကိုယ်စားပြုမှုမှ ဖတ်ရှုနိုင်မှုအတိုင်းအတာအရ များစွာကွာခြားမှုမရှိပါ။

ဥပမာအားဖြင့်၊ wasm တွင်ပြုစုထားသော မူရင်း C လုပ်ဆောင်ချက်

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

float dot(const vec3 *a၊ const vec3 *b) {
a->x * b->x + ပြန်ပေးပါ။
a->y * b->y +
a->z * b->z;
}

wasm-decompile utility ဖြင့် pseudo-language အဖြစ် ခွဲထုတ်ပါမည်

လုပ်ဆောင်ချက် အစက်(a:{ a:float၊ b:float၊ c:float }၊
b:{ a:float၊ b:float၊ c:float }): float {
return 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))))))

source: opennet.ru

မှတ်ချက် Add