Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

บทนำ

ดีบัก 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:

  1. ระดับสูงและเข้าใจง่าย
  2. instrumentation สร้างได้ง่าย ทดสอบได้ และดีบักได้
  3. แสดง instrumentation ในรูปของโพรบที่มีเพรดิเคต
  4. สามารถทำ instrumentation กับ อีเวนต์ที่ความละเอียดต่างกันได้
  5. ให้ พฤติกรรมในรูปฟังก์ชัน Wasm แล้วระบุว่าควรเรียกใช้ตรงไหนใน Whamm
  6. เขียน instrumentation ครั้งเดียว ส่วนที่เหลือ Whamm จัดการกลยุทธ์การอินเจกต์ให้

เครื่องมือที่เขียนด้วยเฟรมเวิร์ก Whamm สามารถนำไปใช้ได้ทั้งผ่านความสามารถด้าน dynamic instrumentation ของเอนจิน หรือผ่านการเขียนไบต์โค้ดใหม่ในกรณีที่เอนจินไม่มีความสามารถดังกล่าว คุณใช้เครื่องมือเดียวกันกับกลยุทธ์ใดก็ได้ เพราะ Whamm ดูแลการอินเจกต์ให้ทั้งหมด! ด้วยความสามารถในการพอร์ตเช่นนี้ Whamm จึงขยายขอบเขตการใช้งานของเครื่องมือให้กว้างขึ้น และช่วยลดการแตกกระจายของเครื่องมือ ทั้งในแง่ของภาษาต้นทาง (เพราะ Wasm รองรับได้หลายภาษา) และในแง่ของเอนจิน Wasm (เพราะมีทางเลือกสำรองอย่างการเขียนไบต์โค้ดใหม่ที่รันได้ทุกที่)

ลองหยุดสักครู่เพื่อพิจารณาขนาดของผลกระทบที่ DSL นี้จะมีต่อเครื่องมือของนักพัฒนา โดยดูจากข้อเท็จจริงต่อไปนี้:

  1. WebAssembly กำลังเติบโตไปสู่การใช้งานนอกเบราว์เซอร์
  2. หลายภาษาสามารถคอมไพล์เป็น Wasm ได้
  3. ด้วย Whamm เขียน instrumentation ครั้งเดียว ก็รองรับแอปได้หลากหลายโดเมน
    • ใช้ความสามารถของเอนจินเท่าที่มี
    • ใช้การเขียนไบต์โค้ดใหม่เพื่อรองรับทุกอย่างที่เหลือ

นั่นหมายความว่าเครื่องมือของนักพัฒนาที่เขียนด้วย Whamm จะรองรับแอปพลิเคชันได้อย่างมหาศาล และทำให้ WebAssembly กลายเป็นแพลตฟอร์มเป้าหมายแห่งอนาคตสำหรับการดีบัก

แหล่งข้อมูล

กลยุทธ์การอินเจกต์:

  • เปเปอร์ที่อธิบายกลยุทธ์การอินเจกต์แบบไม่รุกล้ำที่ Whamm ใช้: Flexible Non-intrusive Dynamic Instrumentation for WebAssembly
  • ไลบรารีที่ใช้ทำกลยุทธ์การอินเจกต์แบบรุกล้ำ (การเขียนไบต์โค้ดใหม่): wirm

คำศัพท์และแนวคิดที่เป็นประโยชน์

  1. WebAssembly (Wasm): WebAssembly คือรูปแบบคำสั่งไบนารีสำหรับเครื่องเสมือนแบบสแตก ถูกออกแบบให้เป็นเป้าหมายการคอมไพล์ที่พอร์ตได้สำหรับภาษาต่างๆ
  2. Instrumentation: เมื่อเราบอกว่า “กำลังทำ instrumentation ให้โปรแกรม” ในระดับสูงหมายถึง “กำลังแทรกโค้ดบางอย่าง เข้าไปในโปรแกรม เพื่อทำงานบางอย่าง” นิยามนี้ตั้งใจให้กว้างเช่นนี้ เพราะ instrumentation ทำได้แทบทุกอย่างเท่าที่เราจินตนาการออก! คุณใช้ instrumentation สร้างดีบักเกอร์ การวิเคราะห์เชิงพลวัต ตัวสร้างเทเลเมทรี และอื่นๆ ได้อีกมากมาย
  3. Dynamic analysis: การวิเคราะห์เชิงพลวัตคือการวิเคราะห์โปรแกรมขณะที่มันกำลังทำงาน (ตรงข้ามกับการวิเคราะห์เชิงสถิตที่วิเคราะห์โปรแกรมซึ่งไม่ได้รันอยู่) การวิเคราะห์ประเภทนี้เปิดโอกาสให้ได้ข้อมูลเชิงลึกที่เป็นประโยชน์เกี่ยวกับโปรแกรม เพราะสามารถเข้าถึงข้อมูลที่ไม่มีในเชิงสถิตได้ (เช่น ตำแหน่งโค้ดที่ทำงานบ่อย การเข้าถึงหน่วยความจำเมื่อเวลาผ่านไป ความครอบคลุมโค้ดของชุดทดสอบ เป็นต้น)
  4. Bytecode rewriting: นี่คือตัวอย่างหนึ่งของกลยุทธ์การฉีดตรรกะ instrumentation เข้าไปในแอปพลิเคชัน กลยุทธ์นี้ฉีด instrumentation ด้วยการแทรกคำสั่งใหม่เข้าไปในไบต์โค้ดของแอปพลิเคชันโดยตรง

1: ตัว ‘h’ ไม่ต้องออกเสียง