[เอกสารสำหรับ Rupta] อยู่ระหว่างการพัฒนา
กรอบโอเพนซอร์ซนี้ Rupta รองรับการวิเคราะห์ตัวชี้/นามแฝงสำหรับการเกิดสนิมทำงานบน Rust Mir ปัจจุบันมีการวิเคราะห์ตัวชี้ตามโทรตามรายละเอียดในกระดาษ CC'24 ของเรา (https://dl.acm.org/doi/10.1145/3640537.3641574)
โคลนที่เก็บ
สร้างและติดตั้ง
คุณสามารถสร้าง Rupta ได้สองวิธี:
$ cargo build คำสั่งนี้สร้างสองไบนารี cargo-pta และ pta ในไดเรกทอรี target/debug
นอกจากนี้คุณยังสามารถติดตั้ง Rupta เป็น cargo :
$ cargo --locked install --path . สิ่งนี้ช่วยให้คุณสามารถทำการวิเคราะห์ตัวชี้ในโครงการสนิมโดยใช้คำสั่ง cargo pta คล้ายกับคำสั่ง cargo อื่น ๆ เช่น cargo fmt
คุณสามารถเรียกใช้ Rupta สำหรับ โครงการสนิม โดยใช้ Binary cargo-pta :
$ cargo-pta pta -- --entry < entry-function-name > --pta-type < pta-type > --context-depth < N > --dump-call-graph < call-graph-path > --dump-pts < pts-path > นอกจากนี้คุณยังสามารถใช้คำสั่ง cargo pta แทน cargo-pta pta หาก Rupta ได้รับการติดตั้งเป็น cargo
หรือคุณสามารถเรียกใช้ Rupta สำหรับ ไฟล์เดียว โดยใช้ Binary pta :
$ pta < path-to-file > --entry-func < entry-function-name > --pta-type < pta-type > --context-depth < N > --dump-call-graph < call-graph-path > --dump-pts < pts-path >ตัวเลือก:
<entry-function-name> : ระบุฟังก์ชั่นรายการ ค่าเริ่มต้นคือ main()<pta-type> : กำหนดประเภทของการวิเคราะห์ตัวชี้ ตัวเลือกคือ cs (callite-sensitive) หรือ ander (Andersen) โดยมี cs เป็นค่าเริ่มต้นcontext-depth : ตั้งค่าความลึกของบริบทในการวิเคราะห์ที่ไวต่อการโทร ค่าเริ่มต้นคือ 1dump-call-graph : เอาต์พุตกราฟการโทรในรูปแบบจุดdump-pts : เอาต์พุตผลการวิเคราะห์คะแนนdump-mir : เอาต์พุต MIR สำหรับฟังก์ชั่นที่เข้าถึงได้ทั้งหมดหมายเหตุ: Rupta ต้องการทรัพยากรการคำนวณและหน่วยความจำที่สำคัญในการวิเคราะห์โครงการสนิมขนาดใหญ่ หากคุณพบเวลาในการวิเคราะห์ที่ยาวมากเกินไปเนื่องจากฟังก์ชั่นจำนวนมากที่สามารถเข้าถึงได้จาก Main () ในระหว่างการวิเคราะห์ - พิจารณาการอัพเกรดเป็นแพลตฟอร์มการคำนวณที่มีประสิทธิภาพยิ่งขึ้นพร้อมกับหน่วยความจำเพิ่มเติม (เช่น 128GB) และซีพียูที่เร็วขึ้น
ตั้งค่าตัวแปรสภาพแวดล้อม PTA_LOG เพื่อเปิดใช้งานการบันทึก:
$ export PTA_LOG=info หากคุณพบข้อผิดพลาดในการโหลดไลบรารีที่ใช้ร่วมกันเช่น librustc_driver.so ลองตั้งค่า:
$ export LD_LIBRARY_PATH= $( rustc --print sysroot ) /lib: $LD_LIBRARY_PATH ดูใบอนุญาต
เราได้เปิดตัวซอร์สโค้ด Rupta เพื่อสนับสนุนชุมชนการวิจัยที่กว้างขึ้นและอำนวยความสะดวกให้กับความก้าวหน้าในสาขานี้ เราหวังว่ามันจะมีค่าสำหรับโครงการของคุณ โปรดให้เครดิตการบริจาคของเราโดยอ้างถึงบทความต่อไปนี้ในสิ่งพิมพ์หรือการนำเสนอใด ๆ ที่ใช้เครื่องมือของเรา:
@inproceedings{li2024context,
title={A Context-Sensitive Pointer Analysis Framework for Rust and Its Application to Call Graph Construction},
author={Li, Wei and He, Dongjie and Gui, Yujiang and Chen, Wenguang and Xue, Jingling},
booktitle={Proceedings of the 33rd ACM SIGPLAN International Conference on Compiler Construction},
pages={60--72},
year={2024},
publisher={ACM},
doi = {10.1145/3640537.3641574}
}
ยินดีต้อนรับความคิดเห็นการมีส่วนร่วมและความร่วมมือใด ๆ กรุณาติดต่อผู้เขียน Wei Li หรือ Jingling Xue หากคุณมีคำถามใด ๆ