All Projects → fundamental → Stoat

fundamental / Stoat

Licence: gpl-3.0
STatic (LLVM) Object file Analysis Tool

Programming Languages

ruby
36898 projects - #4 most used programming language

Projects that are alternatives of or similar to Stoat

SCAF
A Speculation-Aware Collaborative Dependence Analysis Framework
Stars: ✭ 25 (-43.18%)
Mutual labels:  llvm, static-analysis
clam
Static Analyzer for LLVM bitcode based on Abstract Interpretation
Stars: ✭ 180 (+309.09%)
Mutual labels:  llvm, static-analysis
vuo
A realtime visual programming language for interactive media.
Stars: ✭ 103 (+134.09%)
Mutual labels:  llvm, realtime
Crab Llvm
Static Analyzer for LLVM bitcode based on Abstract Interpretation
Stars: ✭ 143 (+225%)
Mutual labels:  static-analysis, llvm
Domtresat
Dominator Tree LLVM Pass to Test Satisfiability
Stars: ✭ 42 (-4.55%)
Mutual labels:  static-analysis, llvm
Sys
Sys: A Static/Symbolic Tool for Finding Good Bugs in Good (Browser) Code
Stars: ✭ 149 (+238.64%)
Mutual labels:  static-analysis, llvm
OCCAM
OCCAM: Object Culling and Concretization for Assurance Maximization
Stars: ✭ 20 (-54.55%)
Mutual labels:  llvm, static-analysis
flextool
C++ compile-time programming (serialization, reflection, code modification, enum to string, better enum, enum to json, extend or parse language, etc.)
Stars: ✭ 32 (-27.27%)
Mutual labels:  llvm, static-analysis
Clang Power Tools
Bringing clang-tidy magic to Visual Studio C++ developers.
Stars: ✭ 285 (+547.73%)
Mutual labels:  static-analysis, llvm
Seahorn
SeaHorn Verification Framework
Stars: ✭ 270 (+513.64%)
Mutual labels:  static-analysis, llvm
Sea Dsa
A new context, field, and array-sensitive heap analysis for LLVM bitcode based on DSA.
Stars: ✭ 90 (+104.55%)
Mutual labels:  static-analysis, llvm
Phasar
A LLVM-based static analysis framework.
Stars: ✭ 503 (+1043.18%)
Mutual labels:  static-analysis, llvm
Codechecker
CodeChecker is an analyzer tooling, defect database and viewer extension for the Clang Static Analyzer and Clang Tidy
Stars: ✭ 1,209 (+2647.73%)
Mutual labels:  static-analysis, llvm
Dg
[LLVM Static Slicer] Various program analyses, construction of dependence graphs and program slicing of LLVM bitcode.
Stars: ✭ 242 (+450%)
Mutual labels:  static-analysis, llvm
Cxxctp
DEPRECATED. USE INSTEAD github.com/blockspacer/flextool
Stars: ✭ 58 (+31.82%)
Mutual labels:  static-analysis, llvm
progge.rs
Program analysis playground for a simple, imperative language
Stars: ✭ 29 (-34.09%)
Mutual labels:  llvm, static-analysis
Clangkit
ClangKit provides an Objective-C frontend to LibClang. Source tokenization, diagnostics and fix-its are actually implemented.
Stars: ✭ 330 (+650%)
Mutual labels:  static-analysis, llvm
Svf
Static Value-Flow Analysis Framework for Source Code
Stars: ✭ 540 (+1127.27%)
Mutual labels:  static-analysis, llvm
Kylin Llvm Obfuscator
based on llvm 5.0.1 release with ollvm
Stars: ✭ 37 (-15.91%)
Mutual labels:  llvm
Clair
Vulnerability Static Analysis for Containers
Stars: ✭ 8,356 (+18890.91%)
Mutual labels:  static-analysis

image::stoat-logo.png[align="center"]

Stoat - Realtime Function Static Analysis

Stoat is a tool to assert properties about the callgraph of programs/libraries. The primary usage of this tool is to analyze programs which need to perform hard realtime operations in a portion of a mixed codebase. This is done by identifying all functions which can transitively be called from some known root function which must be realtime. If any unsafe function which could block for an arbitrary amount of time is found in this transitive closure, then an error is emitted to indicate where the improper behavior can be found and what backtrace is responsible for it getting called.

Why?


Maintaining a large codebase in C/C\++ can make it very difficult to know what
code ends up calling what other routines.
This is further complicated when there is some segregation within one codebase
which may not be at all clear in implementation.
This is further complicated by the opaqueness of some C++ techniques, such as
virtual overloading, operator overloading, multiple inheritance, and
implicit conversions.

Requires
  • LLVM 3.3+
  • Clang 3.3+
  • c++filt
  • ruby
  • graphviz gem (OPTIONAL) for callgraph renderings
  • colorize gem (OPTIONAL) for colored output

How To Build


[source,shell]
-----------------------------------------------------------
git clone https://github.com/fundamental/stoat && cd stoat
mkdir build && cd build
cmake .. && make && make test
make install #or just run in place
-----------------------------------------------------------

Features
~~~~~~~~

- Inline safety markers +++__attribute__((annotate("realtime")))+++
- Inline hazard markers +++__attribute__((annotate("non-realtime")))+++
- Out-of-line whitelists/blacklists
- Out-of-line suppression files
- Graph capabilities for safe or contradicting graph
- Support for dispatch tree analysis within librtosc

How To Use
~~~~~~~~~~

1. Annotate a root realtime function with +++__attribute__((annotate("realtime")))+++
2. Compile all files with CC=stoat-compile CXX=stoat-compile++ or just compile
   files with clang's -emit-llvm flag
3. Run the stoat on the resulting llvm IR files using the --recursive option
4. View the contradictions
5. Optionally redo the analysis using the -G option to graphically view the
   contradictions
6. Update your code, a whitelist, or suppression list
7. Enjoy the safer code

For a more explicit guide please see the tutorial at
http://log.fundamental-code.com/2014/08/15/stoat-tutorial-example.html

License
~~~~~~~

Stoat is available under the GPLv3 license
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].