️ [Документация для Рупты] находится в стадии разработки.
Эта структура с открытым исходным кодом, Рупта, поддерживает анализ указателя/псевдонима для ржавчины, работающей на ржавчине. В настоящее время он предлагает анализ указателей на основе звонков, как подробно описано в нашей статье CC'24 (https://dl.acm.org/doi/10.1145/3640537.3641574).
Клонировать репозиторий
Сборка и установка
Вы можете построить Рупту двумя разными способами:
$ cargo build Эта команда генерирует две двоичные файлы, cargo-pta и pta , в каталоге target/debug .
Вы также можете установить Rupta в cargo :
$ cargo --locked install --path . Это позволяет вам выполнять анализ указателей на проекте Rust, используя командную cargo pta , аналогично другим командам cargo , таким как cargo fmt .
Вы можете запустить Rupta для проекта ржавчины, используя бинарную 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 для одного файла, используя бинарную 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 (чувствительные к звонкам) или ander (Andersen), с cs в качестве дефолта.context-depth : устанавливает глубину контекстов в чувствительном к вызовов анализу. По умолчанию 1.dump-call-graph : выводит график вызовов в точечном формате.dump-pts : выводит результаты анализа точек.dump-mir : выводит miR для всех достижимых функций.Примечание. Рупта требует существенных вычислительных ресурсов и ресурсов памяти для анализа крупных проектов ржавчины. Если вы сталкиваетесь с чрезмерно длительным временем анализа - часто из -за многих функций, достижимых от Main () во время анализа - модернизации до более мощной вычислительной платформы, оснащенной дополнительной памятью (например, 128 ГБ) и более быстрыми процессорами.
Установите переменную среды 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, если у вас есть какие -либо вопросы.