C Analyzer : A Static Program Analysis Tool for C Programs (2403.12973v1)
Abstract: In our times, when the world is increasingly becoming more dependent on software programs, writing bug-free, correct programs is crucial. Program verification based on formal methods can guarantee this by detecting run-time errors in safety-critical systems to avoid possible adverse impacts on human life and save time and money. This project work tries to leverage Abstract Interpretation techniques for static analysis of C programs. C Analyzer is a tool developed for static analysis of C programs. This implementation of C Analyzer provides a plug-and-play domain architecture for multiple abstract domains to be used. C Analyzer supports four abstract domains - Interval, Octagon, Polyhedra, and Bit Vector. We use these different domains for required precision in program verification. C Analyzer tool uses LLVM C/C++ compiler frontend Clang API to generate and traverse the Control Flow Graph (CFG) of a given C program. This tool generates invariants in different abstract domains for statements in basic blocks of CFG during CFG traversal. Using these invariants, some properties of a program, such as dividing by zero, modulus zero, arithmetic overflow, etc., can be analyzed. We also use a source-to-source transformation tool, CIL (Common Intermediate language), to transform some C constructs into simpler constructs, such as transforming logical operators, switch statements, and conditional operators into if-else ladders and transforming do-while and for loops into while loops. Using C Analyzer, C program constructs such as declarations, assignments, binary operations (arithmetic, relational, bitwise shift, etc.), conditions (if-else), loops (while, do while, for loop), nested conditions, and nested loops can be analyzed. Currently, this tool does not support arrays, structures, unions, pointers, or function calls.
- Wikipedia for several conceptual articles, especially under chapter Literature Survey http://en.wikipedia.org/
- Patrick Cousot, Introduction to Abstract Interpretation http://www.di.ens.fr/~cousot/AI/IntroAbsInt.html.
- Examples of abstract-interpretation-based static analysis http://www.di.ens.fr/~cousot/AI/#tth_sEc4.
- Gregoire Sutre 2008, slides on Software Verification www.mpi-inf.mpg.de/vtsa08/slides/sutre1.pdf and www.mpi-inf.mpg.de/vtsa08/slides/sutre2.pdf
- Tutorial on Abstract Interpretation: https://ti.arc.nasa.gov/m/tech/rse/publications/papers/cglobalsurveyor/abs_int_tutorial.ppt
- Software Bugs http://www5.in.tum.de/~huckle/bugse.html.
- Static Program Analysis, http://www.irisa.fr/lande/jensen/spa.html
- Antoine Mine´´𝑒\acute{e}over´ start_ARG italic_e end_ARG: 2006, The Octagon Abstract Domain.
- Ctree - an implementation of AST generation using Flex/Bison based parser http://sourceforge.net/projects/ctool/files/ctree/.
- ANSI C Grammar - Lex http://www.lysator.liu.se/c/ANSI-C-grammar-l.html
- ANSI C Grammar - Yacc http://www.lysator.liu.se/c/ANSI-C-grammar-y.html
- APRON http://apron.cri.ensmp.fr/library/
- The LLVM Compiler Infrastructure Umbrella Project http://llvm.org/.
- Clang - Static Analyzer Checker User Guide http://clang-analyzer.llvm.org/checker_dev_manual.html.
- Chris Lattner and Vikram Adve. LLVM: A Compilation Framework for Lifelong Program Analysis & Transformation. In CGO'04: Proceedings of the International Symposium on Code Generation and Optimization: Feedback-directed and Run-time Optimization, 2004.
- LLVM: The Architecture of Open Source Applications Vol-I chapter-11 http://www.aosabook.org/en/llvm.html.
- Clang's Stmt class reference online at LLVM website: http://clang.llvm.org/doxygen/classclang_1_1Stmt.html
- Clang's RecursiveASTVisitor class reference: http://clang.llvm.org/doxygen/classclang_1_1RecursiveASTVisitor.html
Collections
Sign up for free to add this paper to one or more collections.
Paper Prompts
Sign up for free to create and run prompts on this paper using GPT-5.