นักพัฒนา V8 แนะนำตัวถอดรหัสสำหรับ WebAssembly

นักพัฒนาเครื่องยนต์ V8 JavaScript นำเสนอ ประโยชน์ Wasm-ถอดรหัสซึ่งทำให้การคอมไพล์ตัวแทนไบนารีระดับกลาง WebAssembly เป็นภาษาหลอกที่อ่านได้ ชวนให้นึกถึง JavaScript และ C ภาษาปลอมที่นำเสนอนั้นเข้าใจง่ายกว่ามากและเหมาะสำหรับการแยกวิเคราะห์ด้วยตนเองมากกว่าการแสดงข้อความของ WebAssembly ในรูปแบบ ".wat" ซึ่งใกล้เคียงกับแอสเซมเบลอร์มากกว่าภาษาระดับสูง ในเวลาเดียวกัน การคอมไพล์ หากเป็นไปได้ จะสะท้อนถึงการเป็นตัวแทนของ Wasm อย่างครบถ้วน

ดีคอมไพเลอร์ เปิด ในชุดเครื่องมือ WABTซึ่งจัดเตรียมการแปลระหว่างการแสดงไบนารีและข้อความของ WebAssembly ตลอดจนการแยกวิเคราะห์ การประมวลผล การแก้ไข และการตรวจสอบไฟล์ wasm ยูทิลิตี้กำลังได้รับการพัฒนาโดยเป็นส่วนหนึ่งของ WABT wasm2cซึ่งทำให้สามารถถอดรหัสไฟล์ wasm เป็นรหัส C ที่เทียบเท่าซึ่งสามารถคอมไพล์โดยคอมไพเลอร์ C แต่จะไม่แตกต่างจากการแสดงข้อความของ "wat" มากนักในแง่ของความสามารถในการอ่าน

ตัวอย่างเช่น ฟังก์ชัน C ดั้งเดิมที่คอมไพล์เป็น Wasm

โครงสร้าง typedef { ลอย x, y, z; }vec3;

จุดลอยตัว (const vec3 *a, const vec3 *b) {
กลับ a->x * b->x +
ก->ย * ข->ย +
a->z * b->z;
}

จะถูกแยกคอมไพล์โดยยูทิลิตี้ wasm-decompile เป็นภาษาเทียม

จุดฟังก์ชัน (a:{ a:float, b:float, c:float },
b:{ a:float, b:float, c:float }):ลอย {
ส่งคืน aa*ba+ab*bb+ac*bc
}

ขณะที่แปลงเป็นรูปแบบข้อความ ".wat" จะมีลักษณะดังนี้

(func $dot (ประเภท 0) (param i32 i32) (ผลลัพธ์ f32)
(f32.เพิ่ม
(f32.เพิ่ม
(f32.mul
(f32.โหลด
(local.get 0))
(f32.โหลด
(local.get 1)))
(f32.mul
(f32.โหลดออฟเซ็ต=4
(local.get 0))
(f32.โหลดออฟเซ็ต=4
(local.get 1))))
(f32.mul
(f32.โหลดออฟเซ็ต=8
(local.get 0))
(f32.โหลดออฟเซ็ต=8
(local.get 1))))))

ที่มา: opennet.ru

เพิ่มความคิดเห็น