V8 ڊولپرز WebAssembly لاءِ ڊيڪمپائلر پيش ڪيو

V8 JavaScript انجڻ جا ڊولپر پيش ڪيو افاديت wasm- decompile، جيڪو توهان کي وچولي بائنري نمائندگي کي ختم ڪرڻ جي اجازت ڏئي ٿو ويب ايزازي جاوا اسڪرپٽ ۽ سي جي ياد ڏياريندڙ هڪ پڙهڻ جي قابل pseudo-ٻولي ۾. تجويز ڪيل pseudo-ٻولي سمجھڻ ۾ تمام آسان آھي ۽ دستي تجزيي لاءِ وڌيڪ موزون آھي WebAssembly جي متن جي نمائندگي جي ڀيٽ ۾ “.wat” فارميٽ ۾، جيڪا اعليٰ سطحي ٻولين جي ڀيٽ ۾ اسيمبليءَ جي ٻولي جي ويجھو آھي. هن حالت ۾، decompilation مڪمل طور تي ممڪن طور تي Wasm نمائندگي کي ظاهر ڪري ٿو.

ڊيڪمپائلر شامل toolkit ۾ شامل WABT، جيڪو WebAssembly جي بائنري ۽ ٽيڪسٽ نمائندگي جي وچ ۾ ترجمو مهيا ڪري ٿو، انهي سان گڏ ويسم فائلن جي پارسنگ، پروسيسنگ، ترميم ۽ تصديق. WABT پڻ هڪ افاديت کي ترقي ڪري رهيو آهي wasm2c، جيڪا wasm فائلن کي برابري واري C ڪوڊ ۾ ترتيب ڏيڻ جي اجازت ڏئي ٿي جيڪا هڪ سي ڪمپلر طرفان مرتب ڪري سگهجي ٿي، پر "wat" جي متن جي نمائندگي کان پڙهڻ جي قابليت جي لحاظ کان گهڻو مختلف ناهي.

مثال طور، اصل C فعل wasm ۾ مرتب ڪيو ويو

typedef struct { فلوٽ x، y، z؛ } vec3؛

فلوٽ ڊٽ (const vec3 *a، const vec3 *b) {
واپسي a->x * b->x +
a->y * b->y +
a->z * b->z؛
}

wasm-decompile utility ذريعي هڪ pseudo-language ۾ decompile ڪيو ويندو

فنڪشن ڊاٽ (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

تبصرو شامل ڪريو