Scalpel เป็นกรอบการวิเคราะห์แบบคงที่ของ Python มันให้ฟังก์ชั่นการวิเคราะห์โปรแกรมที่สำคัญเพื่ออำนวยความสะดวกในการดำเนินการตามแอปพลิเคชันไคลเอนต์ที่มุ่งเน้นไปที่การแก้ไขปัญหาเฉพาะอย่างถาวร
ติดตั้งมีดผ่าตัดโดยใช้ PIP ด้วยคำสั่งต่อไปนี้
pip install python-scalpelเราจะขอบคุณอย่างมากหากคุณสามารถมีส่วนร่วมในโครงการนี้ โปรดทำเช่นนั้นโดยส่งรายงานปัญหาหรือเพิ่มคำขอดึงโดยตรง เราหวังว่าจะได้รับความช่วยเหลือ:
คู่มือผู้ใช้โดยละเอียดสามารถดูได้ที่ python-scalpel.readthedocs.io
เราตั้งเป้าหมายที่จะให้ Scalpel เป็นกรอบการวิเคราะห์แบบคงที่ Python ทั่วไปซึ่งมีฟังก์ชั่นให้ได้มากที่สุดเท่าที่จะเป็นไปได้ (เช่นเพื่อสร้างกราฟการควบคุมการควบคุมระหว่างฟังก์ชันเพื่อตีความความสัมพันธ์การนำเข้าของโมดูล Python ที่แตกต่างกัน ฯลฯ ) เพื่ออำนวยความสะดวกให้กับนักพัฒนา รูปต่อไปนี้แสดงให้เห็นถึงสถาปัตยกรรมปัจจุบันของการออกแบบ

เอกสาร API ของ Scalpel มีอยู่ที่ python-scalpel.readthedocs.io
เราปล่อยซอร์สโค้ดมีดผ่าตัดด้วยความหวังว่าจะได้รับประโยชน์จากผู้อื่น คุณขอให้รับทราบการใช้เครื่องมือโดยอ้างถึงบทความต่อไปนี้:
@article{li2022scalpel,
title={Scalpel: The Python Static Analysis Framework},
author={Li, Li and Wang, Jiawei and Quan, Haowei},
journal={arXiv preprint arXiv:2202.11840},
year={2022}
}
Scalpel ได้รับเชิญให้นำเสนอที่ Europython 2022 Europython เป็นการประชุม Python Programming ที่เก่าแก่ที่สุดและยาวที่สุด

โครงการนี้ได้รับแรงบันดาลใจจากผลงานที่มีอยู่มากมาย หากคุณคิดว่างานของคุณปรากฏในโครงการนี้ แต่ยังไม่ได้กล่าวถึงโปรดแจ้งให้เราทราบด้วยวิธีการใด ๆ
ฟังก์ชั่น 1: ผู้เขียนรหัส โมดูลผู้เขียนรหัสได้รับการออกแบบเป็นฟังก์ชั่นพื้นฐานสำหรับการสนับสนุนการเปลี่ยนแปลงอย่างเป็นระบบในโปรแกรม Python ที่มีอยู่ การใช้งานเบื้องต้นสองครั้งของฟังก์ชั่นนี้คือ (1) ทำให้โปรแกรมง่ายขึ้นสำหรับการวิเคราะห์แบบคงที่ที่ดีขึ้นและ (2) เพิ่มประสิทธิภาพหรือซ่อมแซมโปรแกรมที่มีปัญหา สำหรับการสนับสนุนการใช้งานครั้งแรกเรารวมเข้ากับกรอบฐานข้อมูลรวมถึงชุดของกฎที่ระบุว่าควรเปลี่ยนตัวอย่างโค้ดที่ตรงกันอย่างไร ฐานข้อมูลนี้ควรขยายอย่างต่อเนื่องเพื่อตอบสนองความต้องการการทำให้เข้าใจง่ายที่ซับซ้อนเพื่อให้ได้การวิเคราะห์แบบคงที่อย่างมีประสิทธิภาพของโปรแกรม Python สำหรับการสนับสนุนการใช้งานครั้งที่สองซึ่งได้รับแรงบันดาลใจจากกลไกการเพิ่มประสิทธิภาพที่จัดทำโดย Soot (หนึ่งในกรอบการวิเคราะห์โปรแกรม Java ที่มีชื่อเสียงที่สุด) เรายังตั้งค่ากระบวนการแปลงด้วยวิธีการโทรกลับโดยเฉพาะเพื่อให้ผู้ใช้เขียนใหม่เพื่อเพิ่มประสิทธิภาพรหัส Python ตามความต้องการที่กำหนดเอง
ฟังก์ชั่น 2: การสร้างกราฟการควบคุมการไหล โมดูลการก่อสร้างกราฟการควบคุมการไหล (CFG) สร้าง CFGs ภายในกระบวนการซึ่งเป็นองค์ประกอบที่สำคัญในการวิเคราะห์การไหลแบบคงที่ด้วยแอปพลิเคชันเช่นการเพิ่มประสิทธิภาพโปรแกรมและการวิเคราะห์ taint CFG แสดงถึงเส้นทางทั้งหมดที่อาจข้ามผ่านโปรแกรมในระหว่างการดำเนินการ CFGs ของโครงการ Python สามารถรวมกับกราฟการโทรเพื่อสร้าง CFG ระหว่างกระบวนการของโครงการ
ฟังก์ชั่นที่ 3: การแสดงผลเดี่ยวแบบคงที่ (SSA) โมดูลการกำหนดเดียวแบบคงที่ให้การเป็นตัวแทนระดับกลางระดับคอมไพเลอร์ (IR) สำหรับการวิเคราะห์รหัส ไม่เพียง แต่สามารถใช้สำหรับการดำเนินการเชิงสัญลักษณ์เท่านั้น แต่ยังรวมถึงการแพร่กระจายอย่างต่อเนื่อง โดยการเปลี่ยนชื่อการกำหนดตัวแปรแต่ละครั้งด้วยชื่อที่แตกต่างกันเราสามารถรับโซ่การใช้งานที่ชัดเจนดังนั้นจึงติดตามวิธีการไหลของข้อมูลในโปรแกรมได้อย่างแม่นยำ
ฟังก์ชั่น 4: การวิเคราะห์นามแฝง เนื่องจากตัวแปรสามารถชี้ไปที่ตำแหน่งหน่วยความจำเดียวกันหรือค่าที่เหมือนกันฟังก์ชั่นการวิเคราะห์นามแฝงได้รับการออกแบบมาเพื่อจำลองการใช้งานดังกล่าว ฟังก์ชั่นนี้มีความสำคัญต่อการแพร่กระจายอย่างต่อเนื่อง นอกจากนี้การวิเคราะห์นามแฝงจะได้รับประโยชน์จากการตรวจสอบประเภทเช่นเดียวกับชื่อ API ที่ผ่านการคัดเลือก
ฟังก์ชั่น 5: การแพร่กระจายอย่างต่อเนื่อง โมดูลการแพร่กระจายคงที่จะประเมินค่าจริงสำหรับตัวแปรที่จุดโปรแกรมบางจุดในเส้นทางการดำเนินการที่แตกต่างกันก่อนรันไทม์ ด้วยค่าจริงที่ทราบล่วงหน้าเราสามารถเพิ่มประสิทธิภาพโค้ดและตรวจจับข้อบกพร่อง การแพร่กระจายอย่างต่อเนื่องจะใช้การเป็นตัวแทนจากโมดูล SSA เพื่อเก็บค่าการบันทึกจากการกำหนดแต่ละตัวสำหรับตัวแปรเดียว
ฟังก์ชั่น 6: การนำเข้ากราฟการก่อสร้าง ใน Python กระแสการนำเข้าและความสัมพันธ์ได้รับการชี้ให้เห็นว่ามีความสำคัญต่อการทำแผนที่ API และการวิเคราะห์การพึ่งพา การก่อสร้างกราฟนำเข้าของเรามีวัตถุประสงค์เพื่อจัดทำโครงสร้างข้อมูลเพื่อแสดงถึงความสัมพันธ์ที่นำเข้าเหล่านี้ในไฟล์โมดูล Python ในโครงการเดียวกัน กราฟนำเข้าของโครงการ Python หลายโครงการสามารถรวมกันเพื่อทำการวิเคราะห์การไหลของข้อมูลระหว่างห้องสมุด
ฟังก์ชั่น 7: ชื่อที่มีคุณสมบัติครบถ้วน Python APIs หรือชื่อฟังก์ชั่นสามารถเรียกใช้ในรูปแบบที่แตกต่างกันขึ้นอยู่กับวิธีการนำเข้า อย่างไรก็ตามสิ่งนี้ส่งผลให้เกิดความไม่สะดวกต่อการวิเคราะห์การใช้ API ในโมดูลนี้เราจะแปลงชื่อการเรียกใช้ฟังก์ชั่นทั้งหมดเป็นชื่อที่ผ่านการรับรองเต็มรูปแบบซึ่งเป็นสตริงประที่สามารถแสดงเส้นทางจากโมดูลระดับบนสุดไปยังวัตถุเอง งานต่าง ๆ สามารถได้รับประโยชน์จากฟังก์ชั่นนี้เช่นการทำความเข้าใจการใช้ API ที่เลิกใช้แล้วการแยกวิเคราะห์การพึ่งพาและการสร้างกราฟการโทรเสียง
ฟังก์ชั่น 8: การก่อสร้างกราฟโทร กราฟการโทรแสดงให้เห็นถึงความสัมพันธ์ในการโทรระหว่างวิธีการในโปรแกรมซอฟต์แวร์ มันเป็นองค์ประกอบพื้นฐานในการวิเคราะห์การไหลแบบคงที่และสามารถใช้ประโยชน์จากงานต่าง ๆ เช่นการทำโปรไฟล์การแพร่กระจายช่องโหว่และการปรับโครงสร้างใหม่ โมดูลนี้กล่าวถึงความท้าทายที่เกิดจากคุณสมบัติที่ซับซ้อนที่นำมาใช้ใน Python เช่นฟังก์ชั่นลำดับที่สูงกว่าและคำจำกัดความฟังก์ชั่นซ้อนเพื่อสร้างกราฟการโทรที่แม่นยำสำหรับโครงการ Python ที่กำหนด
ฟังก์ชั่น 9: การอนุมานประเภท Python เป็นภาษาที่พิมพ์แบบไดนามิกเผชิญกับปัญหาของการใช้ประโยชน์จากพลังทั้งหมดของการวิเคราะห์แบบคงที่แบบดั้งเดิม โมดูลนี้ทำให้ข้อมูลประเภทของตัวแปรทั้งหมดรวมถึงค่าการส่งคืนฟังก์ชันและพารามิเตอร์ฟังก์ชันในโปรแกรม Python ทำให้การวิเคราะห์แบบคงที่ที่ซับซ้อนยิ่งขึ้นเป็นไปได้สำหรับ Python เราใช้การวิเคราะห์การไหลของข้อมูลย้อนหลังและชุดของกฎฮิวริสติกเพื่อให้ได้ความแม่นยำสูง