โอปอลเป็นห้องสมุดที่ขยายได้สำหรับการวิเคราะห์และจาวาไบต์ทางวิศวกรรม โอปอลถูกเขียนขึ้นอย่างสมบูรณ์ในสกาล่าและใช้ประโยชน์จากคุณสมบัติภาษาขั้นสูงของสกาล่าเพื่อให้ความยืดหยุ่นและความสะดวกในการใช้งานใหม่และไม่สามารถใช้งานได้ โอปอลได้รับการออกแบบจากพื้นดินด้วย การขยายความสามารถ ในการปรับตัว และ ความสามารถในการปรับขนาด (หน่วยความจำและประสิทธิภาพที่ชาญฉลาด) ในใจ หลายส่วนของโอปอลมีการขนานกันอยู่แล้วให้โครงสร้างพื้นฐานที่จำเป็นเพื่อใช้การวิเคราะห์ที่เกิดขึ้นพร้อมกันสูงหรืออย่างน้อยก็ปลอดภัย
โอปอลประกอบด้วยหลายโครงการ:
Common (OPAL/Common): มีฟังก์ชั่นที่เป็นประโยชน์ทั่วไปโครงสร้างข้อมูล (เช่น triemaps) และอัลกอริทึมกราฟ (เช่นการคำนวณส่วนประกอบที่เชื่อมต่ออย่างมากข้อมูลการคำนวณข้อมูล ฯลฯ ) มีประโยชน์เมื่อวิเคราะห์รหัส (BYTE)
โครงสร้างพื้นฐานการวิเคราะห์แบบสแตติก (OPAL/SI): มีกรอบการทำงานตามโครงข่ายทั่วไปสำหรับการดำเนินการวิเคราะห์แบบคงที่แบบแยกส่วน
โครงสร้างพื้นฐาน Bytecode (OPAL/BI): โครงสร้างพื้นฐานที่จำเป็นสำหรับการแยกวิเคราะห์ Java 1.0 - Java 16 bytecode
Bytecode Disassembler (OPAL/DA): Java Bytecode Disassembler ที่ให้การแสดงแบบหนึ่งต่อหนึ่งของไฟล์คลาสและสามารถใช้ในการสร้างการแสดง HTML ที่อ่านได้ของไฟล์คลาส Java
Bytecode Creator (OPAL/BC): โครงสร้างพื้นฐานพื้นฐานที่สุดสำหรับวิศวกร Java Bytecode
การแสดง Bytecode (OPAL/BR): การแสดงฐานของโอปอลของ Java bytecode ใช้ฟังก์ชั่นทั้งหมดเพื่อทำการวิเคราะห์ขั้นพื้นฐานของไฟล์คลาส Java
Framework การตีความบทคัดย่อ (OPAL/AI): การดำเนินการตามกรอบการตีความที่เป็นนามธรรมซึ่งสามารถใช้ในการใช้การวิเคราะห์ได้อย่างง่ายดายในระดับความแม่นยำที่แตกต่างกัน
รหัสที่อยู่สามตัว (OPAL/TAC): จัดเตรียมการเป็นตัวแทนระดับกลางที่ใช้รหัส 3 ตัว สิ่งที่ไร้เดียงสาซึ่งถูกสร้างขึ้นโดยตรงตาม bytecode และการเป็นตัวแทน SSA ระดับสูงกว่าซึ่งให้ข้อมูล CFG โดยตรงเช่นเดียวกับการใช้งาน def-use โดยใช้ผลลัพธ์ของการตีความนามธรรมพื้นฐาน
การสกัดการพึ่งพา (OPAL/DE): ให้การสนับสนุนสำหรับการแยกและวิเคราะห์การพึ่งพาซอร์สโค้ดของโครงการ โครงการนี้เป็นรากฐานสำหรับโครงการเช่นตรวจสอบสถาปัตยกรรม
การตรวจสอบสถาปัตยกรรม (OPAL/AV): กรอบเล็ก ๆ เพื่อตรวจสอบสถาปัตยกรรมที่ดำเนินการของโครงการกับหนึ่งที่ระบุ
เฟรมเวิร์ก (OPAL/FRAMEWORK): โดยทั่วไปเพียงแค่รวมโครงการย่อยทั้งหมดเพื่อให้ได้ภาพรวมที่สอดคล้องกันของโครงการย่อยทั้งหมดได้อย่างง่ายดาย โดยทั่วไปขอแนะนำให้ประกาศการพึ่งพาโครงการนี้เมื่อคุณต้องการใช้โอปอล
การสาธิต (OPAL/DEMOS): มีตัวอย่างรหัสการทำงานที่แสดงให้เห็นถึงวิธีการใช้โอปอล รหัสในโครงการสาธิตนั้นมีความหมายเป็นหลักในฐานะทรัพยากรการสอน ในการเริ่มต้นตัวอย่างให้เริ่มคอนโซล sbt (Scala Build Tools) และเปลี่ยนโครงการปัจจุบันเป็น "การสาธิต" ( project Demos ) หลังจากนั้นคุณสามารถ run วิเคราะห์การสาธิตเล็ก ๆ หลายครั้ง
Hermes (Opal/Tools/Hermes): กรอบการทำงานเพื่อเรียกใช้การสืบค้นรหัสต่างๆกับชุดของโครงการ
Bugpicker (Opal/Tools/BP): เครื่องมือในการค้นหาปัญหาขึ้นอยู่กับการควบคุม/ข้อมูลการไหลในซอร์สโค้ด ประเภทของปัญหาที่ระบุช่วงตั้งแต่การตรวจสอบการป้องกันที่ไร้ประโยชน์ไปจนถึงข้อบกพร่องที่นำไปสู่ข้อยกเว้นรันไทม์
โอปอลยังมาพร้อมกับเครื่องมือจำนวนมากที่มีจุดประสงค์เพื่อช่วยให้นักพัฒนาคุ้นเคยกับจาวาไบต์และ/หรือโอปอล โครงการเหล่านี้พบได้ในโฟลเดอร์ DEVELOPING_OPAL/tools และสามารถเรียกใช้งานได้โดยใช้คอนโซล SBT
ต่อไปนี้ใช้กับสาขา "Master/Develop"
โอปอลใช้ SBT เป็นเครื่องมือสร้างและการทำงานกับโอปอลนั้นง่ายมากโดยใช้คอนโซล SBT ตรวจสอบให้แน่ใจว่าคุณมี Java 8 อย่างน้อยอัปเดต 171, Scala 2.12.13 และ SBT 1.4.6 ติดตั้งและรันและ SBT สามารถใช้ RAM อย่างน้อย 4GB (-xmx4g) ดาวน์โหลดสแน็ปช็อตล่าสุดของโอปอลหรือโคลนที่เก็บ ไปที่โฟลเดอร์รูทของโอปอล
sbt cleanBuild สิ่งนี้รวบรวมโครงการหลักทั้งหมด (รวมถึงการทดสอบ) สร้างเอกสาร Scaladoc ทั่วทั้งโครงการและเผยแพร่โครงการไปยังไดเรกทอรีไม้เลื้อยในพื้นที่ของคุณlocal.sbt และระบุคุณสมบัติสองระบบ ( JAVA_OPTS ): -dorg.opalj.threads.cpuboundTasks = CPUBoundTasks === "Number of real CPUs (Cores)" IOBoundTasks === "Number of (hyperthreaded) cores * 1 .5" -Dorg.opalj.threads.CPUBoundTasks=8 -Dorg.opalj.threads.IOBoundTasks=24 - ตั้งค่าเป็นค่าที่เหมาะสม IOBoundTasks === "Number of (hyperthreaded) cores * 1 .5" ) นอกจากนี้คุณยังสามารถตั้งค่าคุณสมบัติเหล่านี้เมื่อใช้ SBT โดยการพิมพ์:eval sys.props("org.opalj.threads.CPUBoundTasks") = "1"sbt test เพื่อเรียกใช้การทดสอบหน่วยและเพื่อทดสอบว่าทุกอย่างทำงานได้ตามที่คาดไว้ โปรดทราบว่าการทดสอบบางอย่างสร้างผลลัพธ์เพิ่มเติม (สี) อย่างไรก็ตามตราบใดที่การทดสอบทั้งหมดประสบความสำเร็จโดยไม่มีข้อผิดพลาดทุกอย่างก็โอเค หาก sbt test ล้มเหลวอาจเป็นเพราะหน่วยความจำไม่เพียงพอ ในกรณีนี้จำเป็นต้องเริ่ม SBT ด้วยหน่วยความจำมากขึ้นsbt it:test เพื่อเรียกใช้ชุดทดสอบการรวม การดำเนินการชุดทดสอบนี้อาจใช้เวลานานมาก (บนเดสก์ท็อปที่รวดเร็วด้วย 32GB และ 8 คอร์มันใช้เวลา ~ 2H)คุณพร้อมที่จะไป
การแก้ไขปัญหา
เมื่อคุณพบปัญหาในการสร้างโอปอลโปรดพิจารณาตัวเลือกต่อไปนี้
ในการเริ่มต้นให้ไปที่หน้าเว็บโครงการ นอกจากนี้รหัสในโครงการ Demos มีตัวอย่างสั้น ๆ จำนวนมากที่แสดงให้เห็นถึงวิธีการแก้ปัญหางานที่เกิดขึ้นทั่วไป ตัวอย่างส่วนใหญ่สามารถดำเนินการโดยตรง
เริ่มคอนโซล SBT (ในการเรียกโฟลเดอร์รูทของโอปอล sbt บนบรรทัดคำสั่ง) เปลี่ยนโครงการเป็นการสาธิตโดยใช้ project Demos คำสั่งและพิมพ์ run เพื่อเรียกใช้หนึ่งในการสาธิต