Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/README.dox
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ PhASAR is primarily developed and maintained by the [Secure Software Engineering
PhASAR was initially developed by Philipp Dominik Schubert (<a href="https://github.com/pdschubert">@pdschubert</a>)(<philipp.schubert@upb.de>).

\b Currently, PhASAR is maintained by
- Fabian Schiebel (<a href="https://github.com/fabianbs96">@fabianbs96</a>)(fabian.schiebel@iem.fraunhofer.de)
- Fabian Schiebel (<a href="https://github.com/fabianbs96">@fabianbs96</a>)(fabian.schiebel@uni-paderborn.de)
- Sriteja Kummita (<a href="https://github.com/sritejakv">@sritejakv</a>)
- Lucas Briese (<a href="https://github.com/jusito">@jusito</a>)
- Martin Mory (<a href="https://github.com/MMory">@MMory</a>)(martin.mory@upb.de)
Expand Down
7 changes: 7 additions & 0 deletions include/phasar/PhasarLLVM/HelperAnalyses.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,9 @@ class HelperAnalyses { // NOLINT(cppcoreguidelines-special-member-functions)
explicit HelperAnalyses(std::unique_ptr<llvm::Module> IRModule,
std::vector<std::string> EntryPoints,
HelperAnalysisConfig Config = {});
explicit HelperAnalyses(std::unique_ptr<LLVMProjectIRDB> IRDB,
std::vector<std::string> EntryPoints,
HelperAnalysisConfig Config = {});
~HelperAnalyses() noexcept;

[[nodiscard]] LLVMProjectIRDB &getProjectIRDB();
Expand All @@ -76,6 +79,10 @@ class HelperAnalyses { // NOLINT(cppcoreguidelines-special-member-functions)
[[nodiscard]] const SCCDependencyGraph<FunctionId> &getCGSCCCallers();
[[nodiscard]] const UsedGlobalsHolder<const llvm::GlobalVariable *> &
getUsedGlobals();
[[nodiscard]] const std::vector<std::string> &
getEntryPoints() const noexcept {
return EntryPoints;
}

private:
std::unique_ptr<LLVMProjectIRDB> IRDB;
Expand Down
6 changes: 6 additions & 0 deletions lib/PhasarLLVM/HelperAnalyses.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,12 @@ HelperAnalyses::HelperAnalyses(std::unique_ptr<llvm::Module> IRModule,
this->IRDB = std::make_unique<LLVMProjectIRDB>(
std::move(IRModule), Config.PreprocessExistingModule);
}
HelperAnalyses::HelperAnalyses(std::unique_ptr<LLVMProjectIRDB> IRDB,
std::vector<std::string> EntryPoints,
HelperAnalysisConfig Config)
: HelperAnalyses(std::string(), std::move(EntryPoints), std::move(Config)) {
this->IRDB = std::move(IRDB);
}

HelperAnalyses::~HelperAnalyses() noexcept = default;

Expand Down
10 changes: 6 additions & 4 deletions tools/phasar-cli/Controller/AnalysisController.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@

#include "AnalysisController.h"

#include "phasar/PhasarLLVM/ControlFlow/LLVMBasedICFG.h"
#include "phasar/PhasarLLVM/DB/LLVMProjectIRDB.h"
#include "phasar/PhasarLLVM/Passes/GeneralStatisticsAnalysis.h"
#include "phasar/PhasarLLVM/TypeHierarchy/DIBasedTypeHierarchy.h"
#include "phasar/PhasarLLVM/Utils/DataFlowAnalysisType.h"
Expand All @@ -22,7 +24,7 @@ void AnalysisController::emitRequestedHelperAnalysisResults() {
auto WithResultFileOrStdout = [&ResultDirectory = this->ResultDirectory](
const auto &FileName, auto Callback) {
if (!ResultDirectory.empty()) {
if (auto OFS = openFileStream(ResultDirectory.string() + FileName)) {
if (auto OFS = openFileStream(ResultDirectory + llvm::Twine(FileName))) {
Callback(*OFS);
}
} else {
Expand All @@ -31,7 +33,7 @@ void AnalysisController::emitRequestedHelperAnalysisResults() {
};

auto EmitterOptions = this->EmitterOptions;
auto &HA = *this->HA;
auto &HA = this->HA;

if (EmitterOptions & AnalysisControllerEmitterOptions::EmitIR) {
WithResultFileOrStdout("/psr-preprocess-ir.ll", [&HA](auto &OS) {
Expand Down Expand Up @@ -211,9 +213,9 @@ LLVMTaintConfig controller::makeTaintConfig(AnalysisController &Data) {
std::string AnalysisConfigPath =
!Data.AnalysisConfigs.empty() ? Data.AnalysisConfigs[0] : "";
return !AnalysisConfigPath.empty()
? LLVMTaintConfig(Data.HA->getProjectIRDB(),
? LLVMTaintConfig(Data.HA.getProjectIRDB(),
parseTaintConfig(AnalysisConfigPath))
: LLVMTaintConfig(Data.HA->getProjectIRDB());
: LLVMTaintConfig(Data.HA.getProjectIRDB());
}

} // namespace psr
14 changes: 9 additions & 5 deletions tools/phasar-cli/Controller/AnalysisController.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,22 +15,22 @@
#include "phasar/PhasarLLVM/HelperAnalyses.h"
#include "phasar/PhasarLLVM/Utils/DataFlowAnalysisType.h"

#include "llvm/ADT/SmallString.h"

#include "AnalysisControllerEmitterOptions.h"

#include <filesystem>
namespace psr {

struct AnalysisController {
HelperAnalyses *HA{};
HelperAnalyses HA;
std::vector<DataFlowAnalysisType> DataFlowAnalyses;
std::vector<std::string> AnalysisConfigs;
std::vector<std::string> EntryPoints;
[[maybe_unused]] AnalysisStrategy Strategy{};
AnalysisControllerEmitterOptions EmitterOptions =
AnalysisControllerEmitterOptions::None;
IFDSIDESolverConfig SolverConfig{};
std::string ProjectID = "default-phasar-project";
std::filesystem::path ResultDirectory;
llvm::SmallString<128> ProjectID;
llvm::SmallString<128> ResultDirectory;

static constexpr bool
needsToEmitPTA(AnalysisControllerEmitterOptions EmitterOptions) {
Expand All @@ -41,6 +41,10 @@ struct AnalysisController {

void emitRequestedHelperAnalysisResults();
void run();

[[nodiscard]] const auto &getEntryPoints() const noexcept {
return HA.getEntryPoints();
}
};

} // namespace psr
Expand Down
8 changes: 2 additions & 6 deletions tools/phasar-cli/Controller/AnalysisControllerInternal.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,9 @@
#ifndef PHASAR_CONTROLLER_ANALYSISCONTROLLERINTERNAL_H
#define PHASAR_CONTROLLER_ANALYSISCONTROLLERINTERNAL_H

#include "phasar/PhasarLLVM/ControlFlow/LLVMBasedICFG.h"
#include "phasar/PhasarLLVM/DB/LLVMProjectIRDB.h"
#include "phasar/PhasarLLVM/Pointer/LLVMAliasSet.h"
#include "phasar/ControlFlow/ICFG.h"
#include "phasar/PhasarLLVM/SimpleAnalysisConstructor.h"
#include "phasar/PhasarLLVM/TaintConfig/LLVMTaintConfig.h"
#include "phasar/Utils/ChronoUtils.h"
#include "phasar/Utils/IO.h"
#include "phasar/Utils/Timer.h"

Expand Down Expand Up @@ -79,8 +76,7 @@ static void emitRequestedDataFlowResults(AnalysisController &Data, T &Solver) {
const auto PrintResult = [&ResultDirectory](llvm::StringRef Suffix,
auto WithStream) {
if (!ResultDirectory.empty()) {
if (auto OFS =
openFileStream(llvm::Twine(ResultDirectory.string()) + Suffix)) {
if (auto OFS = openFileStream(ResultDirectory + Suffix)) {
WithStream(*OFS);
}
} else {
Expand Down
14 changes: 7 additions & 7 deletions tools/phasar-cli/Controller/AnalysisControllerInternalIDE.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ static void executeIfdsIdeAnalysisImpl(SolverTy &Solver,
template <typename SolverTy, typename ProblemTy, typename... ArgTys>
static void executeSparseIfdsIdeAnalysis(AnalysisController &Data,
ArgTys &&...Args) {
SparseLLVMBasedICFGView SVFG(&Data.HA->getICFG(), Data.HA->getAliasInfo());
SparseLLVMBasedICFGView SVFG(&Data.HA.getICFG(), Data.HA.getAliasInfo());
executeIfdsIdeAnalysisImpl<SolverTy, ProblemTy>(
Data, SVFG, std::forward<ArgTys>(Args)...);
}
Expand All @@ -56,42 +56,42 @@ static void executeIFDSAnalysisWithICFG(AnalysisController &Data,
const ICFG auto &ICF,
ArgTys &&...Args) {
auto Problem =
createAnalysisProblem<ProblemTy>(*Data.HA, std::forward<ArgTys>(Args)...);
createAnalysisProblem<ProblemTy>(Data.HA, std::forward<ArgTys>(Args)...);
IFDSSolver Solver(&Problem, &ICF);
executeIfdsIdeAnalysisImpl(Solver, Data);
}
template <typename ProblemTy, typename... ArgTys>
static void executeIDEAnalysisWithICFG(AnalysisController &Data,
const ICFG auto &ICF, ArgTys &&...Args) {
auto Problem =
createAnalysisProblem<ProblemTy>(*Data.HA, std::forward<ArgTys>(Args)...);
createAnalysisProblem<ProblemTy>(Data.HA, std::forward<ArgTys>(Args)...);
IDESolver Solver(&Problem, &ICF);
executeIfdsIdeAnalysisImpl(Solver, Data);
}

template <typename ProblemTy, typename... ArgTys>
static void executeIFDSAnalysis(AnalysisController &Data, ArgTys &&...Args) {
executeIFDSAnalysisWithICFG<ProblemTy>(Data, Data.HA->getICFG(),
executeIFDSAnalysisWithICFG<ProblemTy>(Data, Data.HA.getICFG(),
PSR_FWD(Args)...);
}

template <typename ProblemTy, typename... ArgTys>
static void executeSparseIFDSAnalysis(AnalysisController &Data,
ArgTys &&...Args) {
SparseLLVMBasedICFGView SVFG(&Data.HA->getICFG(), Data.HA->getAliasInfo());
SparseLLVMBasedICFGView SVFG(&Data.HA.getICFG(), Data.HA.getAliasInfo());
executeIFDSAnalysisWithICFG<ProblemTy>(Data, SVFG, PSR_FWD(Args)...);
}

template <typename ProblemTy, typename... ArgTys>
static void executeIDEAnalysis(AnalysisController &Data, ArgTys &&...Args) {
executeIDEAnalysisWithICFG<ProblemTy>(Data, Data.HA->getICFG(),
executeIDEAnalysisWithICFG<ProblemTy>(Data, Data.HA.getICFG(),
PSR_FWD(Args)...);
}

template <typename ProblemTy, typename... ArgTys>
static void executeSparseIDEAnalysis(AnalysisController &Data,
ArgTys &&...Args) {
SparseLLVMBasedICFGView SVFG(&Data.HA->getICFG(), Data.HA->getAliasInfo());
SparseLLVMBasedICFGView SVFG(&Data.HA.getICFG(), Data.HA.getAliasInfo());
executeIDEAnalysisWithICFG<ProblemTy>(Data, SVFG, PSR_FWD(Args)...);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ namespace psr::controller {
template <typename SolverTy, typename ProblemTy, typename... ArgTys>
static void executeMonoAnalysis(AnalysisController &Data, ArgTys &&...Args) {
auto Problem =
createAnalysisProblem<ProblemTy>(*Data.HA, std::forward<ArgTys>(Args)...);
createAnalysisProblem<ProblemTy>(Data.HA, std::forward<ArgTys>(Args)...);
SolverTy Solver(Problem);
Solver.solve();
emitRequestedDataFlowResults(Data, Solver);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,5 @@ using namespace psr;
void controller::executeIDECSTDIOTS(AnalysisController &Data) {
CSTDFILEIOTypeStateDescription TSDesc;
executeIDEAnalysis<IDETypeStateAnalysis<CSTDFILEIOTypeStateDescription>>(
Data, &TSDesc, Data.EntryPoints);
Data, &TSDesc, Data.getEntryPoints());
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,6 @@ void controller::executeIDEFIIA(AnalysisController &Data) {
Current);
};

executeIDEAnalysis<IDEFeatureTaintAnalysis>(Data, Data.EntryPoints,
executeIDEAnalysis<IDEFeatureTaintAnalysis>(Data, Data.getEntryPoints(),
Generator);
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,6 @@ void controller::executeIDEIIA(AnalysisController &Data) {
Current);
};

executeIDEAnalysis<IDEInstInteractionAnalysis>(Data, Data.EntryPoints,
executeIDEAnalysis<IDEInstInteractionAnalysis>(Data, Data.getEntryPoints(),
Generator);
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,5 @@
using namespace psr;

void controller::executeIDELinearConst(AnalysisController &Data) {
executeIDEAnalysis<IDELinearConstantAnalysis>(Data, Data.EntryPoints);
executeIDEAnalysis<IDELinearConstantAnalysis>(Data, Data.getEntryPoints());
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,5 @@ using namespace psr;
void controller::executeIDEOpenSSLTS(AnalysisController &Data) {
OpenSSLEVPKDFDescription TSDesc;
executeIDEAnalysis<IDETypeStateAnalysis<OpenSSLEVPKDFDescription>>(
Data, &TSDesc, Data.EntryPoints);
Data, &TSDesc, Data.getEntryPoints());
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,5 @@
using namespace psr;

void controller::executeIDESolverTest(AnalysisController &Data) {
executeIDEAnalysis<IDESolverTest>(Data, Data.EntryPoints);
executeIDEAnalysis<IDESolverTest>(Data, Data.getEntryPoints());
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,5 @@ using namespace psr;
void controller::executeIDEXTaint(AnalysisController &Data) {
auto Config = makeTaintConfig(Data);
executeIDEAnalysis<IDEExtendedTaintAnalysis<>>(Data, Config,
Data.EntryPoints);
Data.getEntryPoints());
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,12 @@ void controller::executeIFDSCFLEnvTaint(AnalysisController &Data) {
auto Config = makeTaintConfig(Data);

auto UserProblem = createAnalysisProblem<IFDSTaintAnalysis>(
*Data.HA, &Config, Data.EntryPoints, /*TaintMainArgs*/ false,
Data.HA, &Config, Data.getEntryPoints(), /*TaintMainArgs*/ false,
/*EnableStrongUpdateStore*/ false);
auto Printer = UserProblem.consumePrinter();
auto FieldSensProblem = CFLFieldSensIFDSProblem(&UserProblem);

IterativeIDESolver Solver(&FieldSensProblem, &Data.HA->getICFG());
IterativeIDESolver Solver(&FieldSensProblem, &Data.HA.getICFG());

SimpleTimer MeasureTime;

Expand All @@ -52,7 +52,7 @@ void controller::executeIFDSCFLEnvTaint(AnalysisController &Data) {
HasResultsDir = !Data.ResultDirectory.empty()](
const llvm::Twine &FileName, auto Handler) {
if (HasResultsDir) {
if (auto OFS = openFileStream(Data.ResultDirectory.string() + FileName)) {
if (auto OFS = openFileStream(Data.ResultDirectory + FileName)) {
Handler(*OFS);
}
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,5 @@
using namespace psr;

void controller::executeIFDSConst(AnalysisController &Data) {
executeIFDSAnalysis<IFDSConstAnalysis>(Data, Data.EntryPoints);
executeIFDSAnalysis<IFDSConstAnalysis>(Data, Data.getEntryPoints());
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,5 @@
using namespace psr;

void controller::executeIFDSSolverTest(AnalysisController &Data) {
executeIFDSAnalysis<IFDSSolverTest>(Data, Data.EntryPoints);
executeIFDSAnalysis<IFDSSolverTest>(Data, Data.getEntryPoints());
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,6 @@ void controller::executeIFDSTaint(AnalysisController &Data) {
auto Config = makeTaintConfig(Data);
// Note: Don't blindly generate argc and argv. Use a proper taint config
// instead
executeIFDSAnalysis<IFDSTaintAnalysis>(Data, &Config, Data.EntryPoints,
executeIFDSAnalysis<IFDSTaintAnalysis>(Data, &Config, Data.getEntryPoints(),
false);
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,5 @@
using namespace psr;

void controller::executeIFDSType(AnalysisController &Data) {
executeIFDSAnalysis<IFDSTypeAnalysis>(Data, Data.EntryPoints);
executeIFDSAnalysis<IFDSTypeAnalysis>(Data, Data.getEntryPoints());
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,5 @@
using namespace psr;

void controller::executeIFDSUninitVar(AnalysisController &Data) {
executeIFDSAnalysis<IFDSUninitializedVariables>(Data, Data.EntryPoints);
executeIFDSAnalysis<IFDSUninitializedVariables>(Data, Data.getEntryPoints());
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,5 @@
using namespace psr;

void controller::executeInterMonoSolverTest(AnalysisController &Data) {
executeInterMonoAnalysis<InterMonoSolverTest>(Data, Data.EntryPoints);
executeInterMonoAnalysis<InterMonoSolverTest>(Data, Data.getEntryPoints());
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,5 @@ using namespace psr;
void controller::executeInterMonoTaint(AnalysisController &Data) {
auto Config = makeTaintConfig(Data);
executeInterMonoAnalysis<InterMonoTaintAnalysis>(Data, Config,
Data.EntryPoints);
Data.getEntryPoints());
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,6 @@
using namespace psr;

void controller::executeIntraMonoFullConstant(AnalysisController &Data) {
executeIntraMonoAnalysis<IntraMonoFullConstantPropagation>(Data,
Data.EntryPoints);
executeIntraMonoAnalysis<IntraMonoFullConstantPropagation>(
Data, Data.getEntryPoints());
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,5 @@
using namespace psr;

void controller::executeIntraMonoSolverTest(AnalysisController &Data) {
executeIntraMonoAnalysis<IntraMonoSolverTest>(Data, Data.EntryPoints);
executeIntraMonoAnalysis<IntraMonoSolverTest>(Data, Data.getEntryPoints());
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
*****************************************************************************/

#include "phasar/DataFlow/MonoIfds/MonoIFDSSolver.h"
#include "phasar/PhasarLLVM/ControlFlow/LLVMBasedICFG.h"
#include "phasar/PhasarLLVM/DataFlow/MonoIfds/Problems/MonoIFDSTaintAnalysis.h"
#include "phasar/PhasarLLVM/Pointer/FilteredLLVMAliasIterator.h"

Expand All @@ -18,17 +19,17 @@ using namespace psr;

void controller::executeMonoIFDSTaint(AnalysisController &Data) {

FilteredLLVMAliasIterator FAI(Data.HA->getAliasInfo());
FilteredLLVMAliasIterator FAI(Data.HA.getAliasInfo());

auto Config = makeTaintConfig(Data);
monoifds::TaintAnalysis TA(&Config, &Data.HA->getUsedGlobals(), &FAI);
monoifds::TaintAnalysis TA(&Config, &Data.HA.getUsedGlobals(), &FAI);

// monoifds::MonoIFDSSolver Solver(&TA, &Data.HA->getICFG());
// Solver //
// .setCGSCCs(&Data.HA->getCGSCCs())
// .setFunctionCompressor(&Data.HA->getCompressedFunctions());

monoifds::MonoIFDSSolver Solver(&TA, *Data.HA);
monoifds::MonoIFDSSolver Solver(&TA, Data.HA);

{
std::optional<Timer> MeasureTime;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,6 @@ using namespace psr;

void controller::executeSparseIFDSTaint(AnalysisController &Data) {
auto Config = makeTaintConfig(Data);
executeSparseIFDSAnalysis<IFDSTaintAnalysis>(Data, &Config, Data.EntryPoints);
executeSparseIFDSAnalysis<IFDSTaintAnalysis>(Data, &Config,
Data.getEntryPoints());
}
Loading
Loading