️ [A documentação para RUPTA] está em desenvolvimento.
Essa estrutura de código aberto, RUPTA, suporta a análise de ponteiro/alias para ferrugem, operando em Rust Mir. Atualmente, ele oferece análise de ponteiro baseada em chamadas, conforme detalhado em nosso artigo CC'24 (https://dl.acm.org/doi/10.1145/3640537.3641574).
Clone o repositório
Construir e instalar
Você pode construir rupta de duas maneiras diferentes:
$ cargo build Este comando gera dois binários, cargo-pta e pta , no diretório target/debug .
Você também pode instalar Rupta em cargo :
$ cargo --locked install --path . Isso permite que você realize a análise de ponteiro em um projeto de ferrugem usando o cargo pta de comando, semelhante a outros comandos cargo como cargo fmt .
Você pode executar o RUPTA para um projeto de ferrugem usando a 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 > Você também pode usar o cargo pta de comando em vez de cargo-pta pta se a RUPTA for instalada em cargo .
Como alternativa, você pode executar rupta para um único arquivo usando o pta binário:
$ 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 >Opções:
<entry-function-name> : Especifica a função de entrada. O padrão é main() .<pta-type> : determina o tipo de análise de ponteiro. As opções são cs (sensíveis ao call-site) ou ander (Andersen), com cs como padrão.context-depth : define a profundidade dos contextos na análise sensível ao call-site. O padrão é 1.dump-call-graph : produz o gráfico de chamadas no formato DOT.dump-pts : produz os resultados dos pontos para análise.dump-mir : produz o MIR para todas as funções acessíveis.Nota: A RUPTA requer recursos computacionais e de memória substanciais para analisar grandes projetos de ferrugem. Se você encontrar tempos de análise excessivamente longos - geralmente devido a muitas funções alcançáveis de Main () durante a análise - a atualização da consideração para uma plataforma de computação mais poderosa equipada com memória adicional (por exemplo, 128 GB) e CPUs mais rápidas.
Defina a variável de ambiente PTA_LOG para ativar o registro:
$ export PTA_LOG=info Se você encontrar erros de carregamento de bibliotecas compartilhadas, como librustc_driver.so , tente configurar:
$ export LD_LIBRARY_PATH= $( rustc --print sysroot ) /lib: $LD_LIBRARY_PATH Consulte a licença
Lançamos o código -fonte da RUPTA para apoiar a comunidade de pesquisa mais ampla e facilitar os avanços no campo. Esperamos que seja valioso para seus projetos. Credite nossa contribuição citando o artigo a seguir em quaisquer publicações ou apresentações que utilizam nossa ferramenta:
@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}
}
Quaisquer comentários, contribuições e colaborações são bem -vindos. Entre em contato com os autores Wei Li ou Jingling Xue se tiver alguma dúvida.