secure-software-engineering / phasar

A LLVM-based static analysis framework.
Other
919 stars 140 forks source link

Indices in uninit variables analysis #720

Open StamesJames opened 2 months ago

StamesJames commented 2 months ago

I tried some phasar-cli analysis on rust code. On a simple hello-world program I got multiple unused variable notifications. When I looked at the llvm code those often where there because phasar hasn't tracked the indices that where already initialized and therefore defined an InsertValue operation as undefined as a whole, although just some indices are undefined.

I have started to implement a solution for this that I wanted to share here. I wrote a IndexWrapper class that acts as the dataflow fact and stores what indices inside a llvm::Value are the Facts. While implementing this I also changed the current implementation of the uninit variables analysis to use the lambdaFlow function instead of local structs so maybe this could also be interesting for PR #616

I'm currently not sure if I handle the GetElementPtrInst right and there is no alias analysis at the moment.

I add my current implementations here:

PhASAR-Uninit-Indexed-Variables.zip

fabianbs96 commented 2 months ago

Hi @StamesJames, thank you for your contribution; it looks quite promising.

However, when reviewing the code, I realized, there are some issues:

Can you maybe create a fork of phasar to put your implementation there? This would make reviews easier

StamesJames commented 1 month ago

Thanks a lot for the review @fabianbs96. I'm quite new to C++ so I already thought there will be a lot of c++ beginner mistakes. I will make a fork and try to fix the issues.