Скальпель - это структура статического анализа Python. Он предоставляет важные функции анализа программы для облегчения реализации клиентских приложений, посвященных статически решению выделенных проблем.
Установите скальпель, используя PIP со следующей командой
pip install python-scalpelМы очень ценим это, если вы сможете внести свой вклад в этот проект. Пожалуйста, не стесняйтесь делать это, отправив отчеты о выпуске или напрямую добавляя запросы на привлечение. Мы надеемся получить помощь для:
Подробные руководства пользователя можно найти на Python-scalpel.readthedocs.io.
Мы стремимся предоставить скальпель как общую структуру статического анализа 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}
}
Скальпель приглашается быть представленным в Europython 2022. Europython-самая старая и самая продолжительная конференция по программированию программирования Python, возглавляемой волонтерами на планете!

Этот проект был вдохновлен многими существующими работами. Если вы думаете, что ваша работа появляется в этом проекте, но еще не упоминалась, пожалуйста, сообщите нам об этом.
Функция 1: переписывание кода. Модуль перезаписи кода разработан в качестве фундаментальной функции для поддержки систематических изменений в существующих программах Python. Два предварительного использования этой функции - это (1) упростить программы для лучшего статического анализа и (2) оптимизировать или восстановить проблемные программы. Для поддержки первого использования мы интегрируемся в структуру базы данных, включая набор правил, указывающих, как следует преобразовать сопоставленные фрагменты кода. Эта база данных должна быть непрерывно расширена для выполнения сложных требований упрощения для достижения эффективного статического анализа программ Python. Для поддержки второго использования, вдохновленного механизмом оптимизации, предоставленного SOOOT (одной из самых известных структур анализа программы статической Java), мы также настроили процесс преобразования с выделенными методами обратного вызова, которые будут переписаны пользователями для оптимизации кода Python на основе их индивидуальных потребностей.
Функция 2: Конструкция графика управления. Конструктивный модуль графика управления (CFG) генерирует внутрипроцедурные CFG, которые являются важным компонентом в анализе статического потока с такими приложениями, как оптимизация программы и анализ DAING. CFG представляет все пути, которые могут пройти через программу во время ее выполнения. CFG проекта Python могут быть объединены с графом вызовов для создания межпроцедурного CFG проекта.
Функция 3: представление статического отдельного назначения (SSA). Статический модуль единого назначения предоставляет промежуточные представления на уровне компилятора (IR) для анализа кода. Это может использоваться не только для символического исполнения, но и для постоянного распространения. Переименуя каждое назначение переменной с разными именами, мы можем получить явные цепочки использования-дефицита, поэтому точно отслеживая, как данные данных в программе.
Функция 4: Анализ псевдонима. Поскольку переменные могут указывать на одно и то же местоположение памяти или идентичные значения, функция анализа псевдонима предназначена для моделирования таких использования. Эта функция может иметь жизненно важное значение для постоянного распространения. Кроме того, анализ псевдонима также будет проверять тип, а также квалификации имени API.
Функция 5: Постоянное распространение. Модуль постоянного распространения будет оценивать фактические значения для переменных в определенных точках программы в разных путях выполнения перед временем выполнения. С фактическими значениями, известными заранее, мы можем оптимизировать код и обнаружить ошибки. Постоянное распространение будет использовать представление от модуля SSA для поддержания записи значений из каждого назначения для одной переменной.
Функция 6: Строительство импорта. В Python были отмечены импортные потоки и отношения важны для картирования API и анализа зависимостей. Наша конструкция импорта графа направлена на то, чтобы предоставить структуру данных для представления этих отношений импорта в файлах модуля Python в том же проекте. Графики импорта множества проектов Python могут быть объединены для проведения межфиблинного анализа данных.
Функция 7: полностью квалифицированное имя InferRer. API Python или имена функций могут быть вызваны по -разному в зависимости от того, как они импортируются. Однако это приводит к неудобствам анализа использования API. В этом модуле мы будем преобразовать все имена вызовов функции в их полностью квалифицированные имена, которые представляют собой пунктированные строки, которые могут представлять путь от модуля верхнего уровня до самого объекта. Различные задачи могут быть извлечены из этой функции, такие как понимание устаревшего использования API, анализа зависимостей, а также построения графиков звуковых вызовов.
Функция 8: Построение графа вызовов. График вызовов изображает отношения между методами в программном обеспечении. Это фундаментальный компонент в анализе статического потока и может быть использован в таких задачах, как профилирование, распространение уязвимости и рефакторинг. Этот модуль решает проблемы, возникающие в соответствии с сложными функциями, принятыми в Python, таких как функции высшего порядка и определения вложенных функций, для построения точных графиков вызовов для заданных проектов Python.
Функция 9: Тип вывод. Python, как динамически напечатанный язык, сталкивается с проблемой, когда трудно использовать полную силу традиционного статического анализа. Этот модуль позволяет типовой информации всех переменных, включая возвращаемые значения функции и параметры функции в программе Python, что делает возможным более сложный статический анализ для Python. Мы используем обратный анализ потоков данных и набор эвристических правил для достижения высокой точности.