บทนำ
ดีบัก Wasm อยู่หรือเปล่า? โรย Whamm ลงไปหน่อยสิ!
หากคุณกำลังสร้างการวิเคราะห์เชิงพลวัต (dynamic analysis) ใหม่สำหรับ Wasm และกำลังมองหาเฟรมเวิร์กที่จะช่วยสนับสนุนคุณอยู่ มาถูกที่แล้วครับ!
Whamm คือเฟรมเวิร์กสำหรับงาน “Wasm Application Monitoring and Manipulation”1
หนังสือเล่มนี้จะช่วยให้คุณก้าวไปในทิศทางที่ถูกต้องเมื่อต้องทำงานกับภาษานี้
เครื่องมือในเฟรมเวิร์ก Whamm เขียนขึ้นด้วยภาษาจำเพาะโดเมน (domain-specific language หรือ DSL) ของมันเอง
โดยได้แรงบันดาลใจมาจากภาษา D ของ DTrace
DSL ของ Whamm ช่วยให้นักพัฒนาเครื่องมือสำหรับ Wasm แสดง instrumentation ของตนผ่านนามธรรมระดับสูง ไม่ว่าจะเป็นอีเวนต์หรือตำแหน่งในโปรแกรมที่ความละเอียดต่างกันก็ตาม
ต่อไปนี้คือเป้าหมายบางส่วนของ DSL Whamm:
- ระดับสูงและเข้าใจง่าย
- instrumentation สร้างได้ง่าย ทดสอบได้ และดีบักได้
- แสดง instrumentation ในรูปของโพรบที่มีเพรดิเคต
- สามารถทำ instrumentation กับ อีเวนต์ที่ความละเอียดต่างกันได้
- ให้ พฤติกรรมในรูปฟังก์ชัน Wasm แล้วระบุว่าควรเรียกใช้ตรงไหนใน
Whamm - เขียน instrumentation ครั้งเดียว ส่วนที่เหลือ
Whammจัดการกลยุทธ์การอินเจกต์ให้
เครื่องมือที่เขียนด้วยเฟรมเวิร์ก Whamm สามารถนำไปใช้ได้ทั้งผ่านความสามารถด้าน dynamic instrumentation ของเอนจิน หรือผ่านการเขียนไบต์โค้ดใหม่ในกรณีที่เอนจินไม่มีความสามารถดังกล่าว
คุณใช้เครื่องมือเดียวกันกับกลยุทธ์ใดก็ได้ เพราะ Whamm ดูแลการอินเจกต์ให้ทั้งหมด!
ด้วยความสามารถในการพอร์ตเช่นนี้ Whamm จึงขยายขอบเขตการใช้งานของเครื่องมือให้กว้างขึ้น และช่วยลดการแตกกระจายของเครื่องมือ ทั้งในแง่ของภาษาต้นทาง (เพราะ Wasm รองรับได้หลายภาษา) และในแง่ของเอนจิน Wasm (เพราะมีทางเลือกสำรองอย่างการเขียนไบต์โค้ดใหม่ที่รันได้ทุกที่)
ลองหยุดสักครู่เพื่อพิจารณาขนาดของผลกระทบที่ DSL นี้จะมีต่อเครื่องมือของนักพัฒนา โดยดูจากข้อเท็จจริงต่อไปนี้:
- WebAssembly กำลังเติบโตไปสู่การใช้งานนอกเบราว์เซอร์
- หลายภาษาสามารถคอมไพล์เป็น Wasm ได้
- ด้วย
Whammเขียน instrumentation ครั้งเดียว ก็รองรับแอปได้หลากหลายโดเมน- ใช้ความสามารถของเอนจินเท่าที่มี
- ใช้การเขียนไบต์โค้ดใหม่เพื่อรองรับทุกอย่างที่เหลือ
นั่นหมายความว่าเครื่องมือของนักพัฒนาที่เขียนด้วย Whamm จะรองรับแอปพลิเคชันได้อย่างมหาศาล และทำให้ WebAssembly กลายเป็นแพลตฟอร์มเป้าหมายแห่งอนาคตสำหรับการดีบัก
แหล่งข้อมูล
กลยุทธ์การอินเจกต์:
- เปเปอร์ที่อธิบายกลยุทธ์การอินเจกต์แบบไม่รุกล้ำที่
Whammใช้: Flexible Non-intrusive Dynamic Instrumentation for WebAssembly - ไลบรารีที่ใช้ทำกลยุทธ์การอินเจกต์แบบรุกล้ำ (การเขียนไบต์โค้ดใหม่): wirm
คำศัพท์และแนวคิดที่เป็นประโยชน์
- WebAssembly (Wasm): WebAssembly คือรูปแบบคำสั่งไบนารีสำหรับเครื่องเสมือนแบบสแตก ถูกออกแบบให้เป็นเป้าหมายการคอมไพล์ที่พอร์ตได้สำหรับภาษาต่างๆ
- Instrumentation: เมื่อเราบอกว่า “กำลังทำ instrumentation ให้โปรแกรม” ในระดับสูงหมายถึง “กำลังแทรกโค้ดบางอย่าง เข้าไปในโปรแกรม เพื่อทำงานบางอย่าง” นิยามนี้ตั้งใจให้กว้างเช่นนี้ เพราะ instrumentation ทำได้แทบทุกอย่างเท่าที่เราจินตนาการออก! คุณใช้ instrumentation สร้างดีบักเกอร์ การวิเคราะห์เชิงพลวัต ตัวสร้างเทเลเมทรี และอื่นๆ ได้อีกมากมาย
- Dynamic analysis: การวิเคราะห์เชิงพลวัตคือการวิเคราะห์โปรแกรมขณะที่มันกำลังทำงาน (ตรงข้ามกับการวิเคราะห์เชิงสถิตที่วิเคราะห์โปรแกรมซึ่งไม่ได้รันอยู่) การวิเคราะห์ประเภทนี้เปิดโอกาสให้ได้ข้อมูลเชิงลึกที่เป็นประโยชน์เกี่ยวกับโปรแกรม เพราะสามารถเข้าถึงข้อมูลที่ไม่มีในเชิงสถิตได้ (เช่น ตำแหน่งโค้ดที่ทำงานบ่อย การเข้าถึงหน่วยความจำเมื่อเวลาผ่านไป ความครอบคลุมโค้ดของชุดทดสอบ เป็นต้น)
- Bytecode rewriting: นี่คือตัวอย่างหนึ่งของกลยุทธ์การฉีดตรรกะ instrumentation เข้าไปในแอปพลิเคชัน กลยุทธ์นี้ฉีด instrumentation ด้วยการแทรกคำสั่งใหม่เข้าไปในไบต์โค้ดของแอปพลิเคชันโดยตรง
1: ตัว ‘h’ ไม่ต้องออกเสียง